[BaekJoon] 백준 1806번 : 부분합
Updated:
1806번 : 부분합
투 포인터를 이용해 부분합을 구할 수 있다.
처음엔 포인터 두 개를 맨 처음과 맨 끝에 두고 좁혀가는 방식으로 계산을 해 풀지 못하고 있었다..
시작과 끝 포인터를 맨 처음에 두고 합이 S 보다 작다면 끝 포인터를 한 칸 옮기고 S 보다 크다면 시작 포인터를 한 칸 옮긴다.
합이 S 보다 클 때는 부분합의 길이를 계산해 갱신 해주면된다.
def solution():
answer = float('inf')
start, end, total = 0, 0, 0
while True:
if total >= S:
print(start, end, total)
answer = min(answer, end - start)
total -= arr[start]
start += 1
elif end == N:
break
else:
total += arr[end]
end += 1
if answer == float('inf'):
return 0
else:
return answer
if __name__ == "__main__":
N, S = map(int, input().split())
arr = list(map(int, input().split()))
print(solution())
Leave a comment