10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오.
Input | Output |
---|---|
10 15 5 1 3 5 10 7 4 9 2 8 | 2 |
# 코드
n, s = map(int, input().split(' '))
sequence = list(map(int, input().split(' ')))
left = 0 # 시작 인덱스
right = 0 # 끝 인덱스
size = 1000000
sub_sum = sequence[0]
while True:
# 부분합이 작을 경우
if sub_sum < s:
right += 1 # 끝 인덱스 + 1
# 범위를 벗어날 경우 종료
if right >= n:
break
# 끝 인덱스의 값 추가
sub_sum += sequence[right]
else:
# 길이가 더 작은 경우 선택
size = min(size, right - left + 1)
# 시작 인덱스의 값 빼기
sub_sum -= sequence[left]
# 시작 인덱스 + 1
left += 1
# 시작 인덱스가 끝 인덱스보다 커질 경우 종료
if left > right:
break
# size의 값이 초기값일 경우 0 반환
if size == 1000000:
print(0)
else:
print(size)