N, S = map(int, input().split())
li = list(map(int, input().split()))
s = 0
e = 0
summary = 0
prefix_sum = [0]
for i in li:
summary += i
prefix_sum.append(summary)
ans = 1000001
s = 0
e = 1
while s != N:
## S 이상 일 때
if prefix_sum[e] - prefix_sum[s] >= S:
## 길이 최소 갱신하기
if e - s < ans:
ans = e - s
## 더 작은 값에서도 S 이상이 되는지 알아봐야 함
s += 1
else:
## (s, e) = (n-1, n) 이 될 때 까지
if e != N:
e += 1
else:
s += 1
if ans != 1000001:
print(ans)
else:
print(0)
예제)
10 15
5 1 3 5 10 7 4 9 2 8
prefix_sum = [0, 5, 6, 9, 14, 24, 31, 35, 44, 46, 54]
e - s= 1 - 0 => 5
2 - 0 => 6
이런 식으로 가면
5 - 3 => 24 - 9 = 15 로
2칸이 가장 최소의 길이다
'알고리즘' 카테고리의 다른 글
<백준> 17478번 파이썬 알고리즘 (0) | 2022.05.26 |
---|---|
<백준> 1644번 파이썬 알고리즘 (0) | 2022.04.20 |
<백준> 2470번 파이썬 알고리즘 [투포인터] (0) | 2022.04.17 |
<백준> 3273번 자바 알고리즘 [투 포인터] (0) | 2022.04.13 |
<백준> 2805번 자바 알고리즘 [이분 탐색] (0) | 2022.03.06 |