https://www.acmicpc.net/problem/1806
import sys
n,s=map(int,sys.stdin.readline().split())
array=list(map(int,sys.stdin.readline().split()))
cnt=0
start=0
end=0
total=0
minimum=int(1e9)
while end!=n:
if array[end]>=s:
minimum=1
break
if total<s:
total+=array[end]
end+=1
cnt+=1
else:
total-=array[start]
start+=1
cnt-=1
if total>=s and cnt<minimum:
minimum=cnt
if end==n:
if minimum==int(1e9):
minimum=0
break
while total>s:
total -= array[start]
start += 1
cnt -= 1
if total >= s and cnt < minimum:
minimum = cnt
print(minimum)
투포인터와 부분합 개념을 이용하여 푸는 문제였다.
계속 74%에서 틀렸습니다가 나와 고민을 했었는데,
반례 중
4 5
1 2 2 3
답: 2
에서 막히는 것을 알 수 있었다.
end==n이 되었을 경우 total>s이더라도 start를 늘려나가는 작업을 수행하지 않아 발생한 문제였다.
'알고리즘||코딩테스트 > 백준' 카테고리의 다른 글
[백준 9934번] 완전 이진 트리 (Silver1) (0) | 2023.06.24 |
---|---|
1991번 트리 순회(Silver1) (0) | 2023.06.23 |
14244번 트리 만들기 (Silver4) (0) | 2023.06.23 |
25682번 체스판 다시 칠하기2 (Gold5) (0) | 2023.06.22 |
11660번 구간 합 구하기5(Silver1) (0) | 2023.06.21 |