본문 바로가기
공부/algorithm

[codility] TapeEquilibrium

by 김쫘 2018. 5. 22.
TapeEquilibrium

TapeEquilibrium

Minimize the value |(A[0] + ... + A[P-1]) - (A[P] + ... + A[N-1])|.

Task Score

100%

Correctness

100%

Performance

100%


 

먼저 보여줄 소스는 correctness 100%에 performance 0%인 코드.. 이것은 앞으로 많이 보게 될 내모습 ㅎㅎㅎ........ 그런데 원래 91%였는데 같은 소스를 넣었는데 왜 50퍼가 되었을까.. 코딜리티에서 시간복잡도 제한을 바꾼건가..

뭐 이러나저러나 50%를 받았고, 일단 설명을 해보겠다.

P값을 1부터 N-2까지 왔다갔다하면서 다 비교해봤다.

설명을 적고보니까 왜 performance가 0% 나왔는지 알 것 같기도 하고 ^^! ㅋㅋㅋㅋㅋㅋㅋ..하...

 

 

 

그래서 다시 풀어보았다.

for문을 이중으로 쓰지않고 할 수 있는 방법을 이렇게 저렇게 바꿔가면서 찾아봤는데, 갑자기 programmers의 별삼각형 문제가 생각났다. 다른 분의 풀이에서 for문을 두번 돌려서 하나하나 처리하지 않고 하나로 별 개수 증가시키는 작업과 결과를 증가시키는 작업을 한번에 처리했던 그 방법.. 위의 풀이처럼 굳이 내가 P값을 i로 정해서 반복해 줄 필요가 없는 거였다.

그래서 어떻게 하면 그런 식으로 한 번에 처리 할 수 있을까? 앞부분을 더해주는 작업과 뒷부분을 더해주는 작업을 내가 하나로 줄여버릴 수 없을까? 하고 고민했다. 답은 있었다. 그냥 총합에서 앞부분을 빼주면 뒷부분이 되는 거였다 ^^.. 와 이걸 왜 생각 못했지..

공간복잡도는 O(N)이므로 단일 for문 두 개 쓰는 것은 제한 내였다. 그래서 먼저 총합을 구해주고, 앞부분을 구한 뒤 뒷부분은 총합에서 앞부분의 값을 빼주는 식으로 구하고, min값 계산은 위에서 했던 방식과 같게 하되 if문을 빼버리고 Math클래스의 메소드를 사용했다.

 

 

 

 


'공부 > algorithm' 카테고리의 다른 글

[codility] MissingInteger  (0) 2018.05.23
[codility] FrogRiverOne  (0) 2018.05.23
[codility] PermMissingElem  (2) 2018.05.22
[codility] FrogJmp  (0) 2018.05.22
[codility] OddOccurrencesInArray  (0) 2018.05.22

댓글