투포인터 문제이다
근데 백준 분류에는 두 포인터라고 되어있는걸 처음알았다
한글을 사랑하자 ^^..
골드4라는 난이도에 비해서는 조금 쉬운것같다
연속된 수들의 부분합이래서 1개짜리도 되는건지 최소 2개이상이어야 하는건지가 헷갈렸는데
원소값 1개가 목표값을 넘었다면 그냥 1개도 된다
이거때문에 1번 틀렸다
import sys
input = sys.stdin.readline
n,s = map(int,input().split())
arr = list(map(int,input().split()))
i=0
j=1
temp = arr[i] + arr[j]
answer = 100001
while(i < n):
if temp < s:
if j == n-1:
break
j += 1
temp += arr[j]
else :
if i == j:
answer = 1
break
answer = min(answer,j+1-i)
temp -= arr[i]
i += 1
if answer == 100001:
print(0)
else :
print(answer)
아 그리고 처음에는 합을 저장해둘 변수를 따로 안만들고 그냥 파이썬스럽게 sum(arr[i:j]) 이런식으로 짰는데 이러면 시간초과가 난다
매번 i~j까지 합연산을 새로 해줘야하니 당연히 시간복잡도가 훨씬 더 잡아먹을거라서
합산된 값을 변수하나에 저장해두고 그때그때 추가되거나 빠지는애들 1개씩만 연산해서 누적해둬야 빠르다
끝