https://programmers.co.kr/learn/courses/30/lessons/49995
접근
구간합 문제이기 때문에 미리 구간합을 구해줍니다.O(Log N)
이러면 매번 계산하지 않아도 O(1)로 구간합을 구할 수 있습니다.
기본적인 알고리즘은 다음과 같습니다.
이렇게 하면 문제는 풀리지만 시간 초과가 납니다.
몇가지 조건만 추가하면 시간초과를 피할 수 있습니다.
다음은 코드 전문입니다.
def solution(cookie):
answer = 0
section_sum = []
N = len(cookie)
for i in range(N):
if i == 0 :
section_sum.append(cookie[i])
else:
section_sum.append(cookie[i]+section_sum[i-1])
maxi = 0
isMaxFind = False
for f in range(0,N):
for l in range(1,N-f+1):
if f == 0:
f_sun = section_sum[f+l-1]
else:
f_sun = section_sum[f+l-1] - section_sum[f-1]
s = f+l
if f_sun > section_sum[-1] - section_sum[s-1]:
break
if f_sun < maxi:
continue
for l2 in range(1,N-s+1):
s_sun = section_sum[s+l2-1] - section_sum[s-1]
if f_sun == s_sun:
maxi = max(maxi,f_sun)
if maxi == section_sum[-1]//2:
isMaxFind = True
break
elif f_sun < s_sun:
break
if isMaxFind:
break
if isMaxFind:
break
answer = maxi
return answer