[BOJ] 백준 1806번: 부분합
1일 1PS 10일차!
📚 문제
골드 4
- 합이 S 이상이 되는 것 중 제일 짧은 수열을 탐색해야한다.
- 합이 S 이하이면 오른쪽의 수를 하나 더 더하고, S 이상이면 왼쪽의 수를 덜 더한다.
💡 포인트
- start, end 지점을 놓고 S 를 비교하며 둘 중 하나의 값을 올린다.
💻 코드
N, S = map(int, input().split())
arr = list(map(int, input().split()))
start, end = 0, 0
sum = arr[0]
ans = 100001
while True:
if sum < S:
end += 1
if end == N:
break
sum += arr[end]
else:
sum -= arr[start]
ans = min(ans, end - start + 1)
start += 1
print(ans if ans != 100001 else 0)
댓글남기기