1806 부분합

정민용·2023년 5월 7일

백준

목록 보기
188/286

문제

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

# 1806
import sys
input = lambda: sys.stdin.readline().strip()

n, s = map(int, input().split())
arr = list(map(int, input().split()))

start, end = 0, 0
num = 0
min_len = n+1

while end < n:
    num += arr[end]
    while num >= s + arr[start]:
        num -= arr[start]
        start += 1
    
    if num >= s:
        min_len = min(min_len, (end-start + 1))
    end += 1
    
if min_len == n+1:
    min_len = 0

print(min_len)

백준 1806 부분합

0개의 댓글