본문 바로가기

알고리즘/투포인터

파이썬 | 백준 | 1806 | 부분합

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_)

 

www.acmicpc.net/problem/1806

 

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