Solution
# 1806, 부분합
import sys
N, S = map(int, sys.stdin.readline().split())
arr = list(map(int, sys.stdin.readline().split()))
start, end, sum = 0, 0, 0
min_ = 100001
while True:
# sum이 s 이상이 되면 start를 하나 증가시킴
if sum >= S:
sum -= arr[start] # start의 위치 1 증가
start += 1
min_ = min(min_, end - start + 1) # start~end까지가 현재 최소값보다 작으면 최소값 갱신
else:
if end == N: # end=N되면 탐색 종료
break
else:
sum += arr[end] # end 위치 1 증가
end += 1
if min_ == 100001: # 초기 min값과 같다면 sum이 S를 넘지 못한 것
min_ = 0
print(min_)
1806번: 부분합
첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다.
www.acmicpc.net
'알고리즘 > 투포인터' 카테고리의 다른 글
파이썬 | 백준 | 2003 | 수들의 합 2 (0) | 2021.03.21 |
---|---|
파이썬 | 백준 | 2473 | 세 용액 (0) | 2021.02.21 |