https://www.acmicpc.net/problem/25916

처음에 부분합을 구할 때
temp = sum(ham[start:end+1])
이런 식으로 구했다가 매번 합을 처리해줘야해서 시간 초과가 났다.
투포인터 알고리즘으로 합이 m보다 크면 start + 1하고 작으면 end + 1하면 된다.
다음은 투포인터의 기본 알고리즘 구조이다.
# start를 차례대로 증가시키며 반복
for start in range(n):
# end만큼 이동시키기
while interval_sum < m and end < n:
interval_sum += data[end]
end += 1
# 부분합이 m일 때 카운트 증가
if interval_sum == m:
count += 1
interval_sum -= data[start]
n, m = map(int, input().split())
ham = list(map(int, input().split()))
end = 0
answer = 0
temp = 0
for i in range(n):
while temp < m and end < n:
temp += ham[end]
end += 1
if temp == m:
answer = m
break
elif temp > m and end <= n:
answer = max(answer, temp - ham[end-1])
else:
answer = max(answer, temp)
temp -= ham[i]
print(answer)