본문 바로가기
Problem Solving/BOJ

[Two Pointer] python 1806 부분합

by Bokoo14 2023. 2. 4.

https://www.acmicpc.net/problem/1806

 

1806번: 부분합

첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다.

www.acmicpc.net

# 2023.02.04
import sys
input = sys.stdin.readline

n, s = map(int, input().split()) # 수열의 길이, 합 S이상이 되는 것 중 가장 짧은 것의 길이
a = list(map(int, input().split())) # 수열

left, right = 0, 0
answer=10**9
tmp=0
while True:
    if tmp>=s:
        answer=min(answer, right-left)
        tmp-=a[left]
        left+=1
    elif right==n:
        break
    else:
        tmp+=a[right]
        right+=1

if answer==10**9:
    print(0)
else:
    print(answer)