본문 바로가기

Computer Science/Algorithm

[Algorithm] Sherlock and Array

[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