본문 바로가기

알고리즘/백준 (Pyhthon)

[알고리즘] 백준 1806 부분합 / python

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

 

1806번: 부분합

문제 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

N, S = map(int, input().split())
A = list(map(int, input().split()))
left, right, hap, result, temp = 0, 0, A[0], 0, 0
while left <= right and right < N:
    if hap < S:
        right += 1
        if right < N:
            hap += A[right]
    elif hap >= S:
        temp = right - left + 1
        if result == 0:
            result = temp
        else:
            result = min(result, temp)
        if left < right:
            hap -= A[left]
            left += 1
        else:
            right += 1
            if right < N:
                hap += A[right]
print(result)