1806번 : 부분합

2022. 1. 10. 23:23문제풀기/백준

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

 

1806번: 부분합

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

www.acmicpc.net

전형적인 투포인터 유형이다.

 

그동안 투포인터를 양 쪽에서 만나는 방식으로 사용했는데, 같이 출발하는 방식도 있다!

import sys

input = sys.stdin.readline

n,s = map(int,input().rstrip().split())
numbers = list(map(int,input().rstrip().split()))
prefix_sum = [0 for _ in range(n+1)]

for i in range(n):
    prefix_sum[i+1] = numbers[i]+prefix_sum[i]

start = 0
end = 0

answer = n+1
check = False

while end<=n:
    if prefix_sum[end] - prefix_sum[start] >= s:
        if answer > end - start:
            answer = end - start
            check = True
        start += 1

    else:
        if end == n:
            break
        else:
            end += 1

if check==False:
    answer = 0

print(answer)

'문제풀기 > 백준' 카테고리의 다른 글

1005번 : ACM Craft  (0) 2022.01.22
14179 : 빗물  (0) 2022.01.04
백준 22860번 : 폴더 정리(small)  (0) 2021.10.06
백준 14567번 : 선수과목 (Prerequisite)  (0) 2021.10.05
백준 1548번 : 부분 삼각 수열  (0) 2021.10.05