[Algorithm] Sherlock and Array
[Problem]
길이가 N인 배열 A가 있다.
특정 위치 i의 원소에 대해서 좌/우의 부분 합이 같은 i를 찾아라.
ex) A[0] + A[1] + . . . + A[i-1] = A[i+1] + A[i+2] + .... + A[n] 을 만족시키는 i
[Solve]
1)
i를 기준으로 좌/우의 합이 같아야 한다.
초기 입력을 받을 시 입력 배열의 총 합을 같이 계산하여 중복 계산을 방지하였다.
i를 기준으로 탐색 시, 탐색 대상을 줄이고자 i의 위치에 따라 좌/우 중에서 원소가 더 적은 쪽의 합을 계산하였다.
부분합을 계산 후 초기 입력 시에 계산 한 전체의 합의 1/2이 되는지를 체크한다.
=>>>>>>>> 하지만 몇 개의 Test case에 대해서 timeout이 발생하였다.
2) Timeout 해결
i를 1부터 찾아가게 되므로,
0 ~ i-1까지의 부분 합을 매번 계산하지 않고, 누적하여 계산할 수 있다.
o(n^2)를 o(n)으로 줄일 수 있다.
'Computer Science > Algorithm' 카테고리의 다른 글
[Algorithm] Snakes and Ladders: The Quickest Way Up (0) | 2016.04.08 |
---|---|
[Algorithm] Grid Challenge (0) | 2016.03.28 |
[Algorithm] Maximise Sum (0) | 2016.03.25 |
[Algorithm] Utopian Tree (0) | 2016.03.21 |
Algorithm 진행 계획 (0) | 2016.03.16 |