문제

문제를 보자마자 딱 투포인터를 활용해서 풀어야겠다는 생각이 들었다.
시작점과 끝점을 두어 s보다 커지면 시작점을 옮기고 작을땐 끝점을 옮겨주면서 확인 해주었다.
정답코드
n, s = map(int,input().split())
arr = list(map(int,input().split()))
end = 0
inf = float('inf')
ans = inf
count = 0
for i in range(n):
while count < s and end<n:
count += arr[end]
end += 1
#while문 수행 이후에도 count가 s보다 작을 수 있으므로 if문 처리
if count >= s:
ans = min(ans,end-i)
#다음 시작점으로 이동위해 현재 시작점의 값 빼줌
count -= arr[i]
if ans == inf:
ans = 0
print(ans)
처음에
#while문 수행 이후에도 count가 s보다 작을 수 있으므로 if문 처리
if count >= s:
ans = min(ans,end-i)
이 부분을 if 문으로 확인을 안하고 단순하게 while문이 수행된 이후에는 count가 s보다 무조건 크다고 잘못 생각하였다.
하지만 현재 인덱스부터 끝까지 전부 더해도 s보다 작은 경우가 존재할 수 있으므로
count가 s보다 큰 경우에만 정답을 갱신하도록 조건을 걸어 주었다.
'코딩테스트 > 백준' 카테고리의 다른 글
| [백준] 2580번 스도쿠 - python파이썬 (백트래킹) (1) | 2025.01.23 |
|---|---|
| [백준] 2110번 공유기 설치 - python 파이썬 (이분탐색) (4) | 2025.01.22 |
| [백준]11054번 가장 긴 바이토닉 부분수열 - python파이썬 (2) | 2025.01.15 |
| [백준]14502번 연구소 BFS - python (1) | 2025.01.06 |
| [백준] 2212번 센서 - python파이썬 (0) | 2024.12.18 |