문제
https://www.acmicpc.net/problem/1806
풀이
그냥 투포인터로 풀면 되는 문제였다.
st 부터 ed까지의 합이 s 미만이면 ed를 한 칸 뒤로 옮기고
s 이상이면 st를 한 칸 뒤로 옮겨 sum 에서 st에 해당하는 값을 뺐다.
불가능할 경우 0을 출력하라는 문구를 못 봐서 틀렸었다.
n, s = map(int, input().split())
arr = list(map(int, input().split()))
st = ed = 0
answer = 100001
sum = arr[0]
while True:
if st > ed:
break
if sum < s:
ed += 1
if ed >= n:
break
sum += arr[ed]
else:
answer = min(answer, ed-st+1)
sum -= arr[st]
st += 1
if st >= n:
break
if answer == 100001:
print(0)
else:
print(answer)
'알고리즘 스터디' 카테고리의 다른 글
[백준] 1916 최소비용 구하기 파이썬 (0) | 2021.11.05 |
---|---|
[백준] 1700 멀티탭 스케줄링 파이썬 (0) | 2021.10.31 |
[백준] 1062 가르침 파이썬 (0) | 2021.10.30 |
[백준] 14719 빗물 파이썬 (0) | 2021.10.30 |
[백준] 2504 괄호의 값 파이썬 (0) | 2021.10.30 |