몽상실현개발주의

[BOJ] 1806 / 부분 합 / Python 파이썬 본문

Algorithm PS/BOJ

[BOJ] 1806 / 부분 합 / Python 파이썬

migrationArc 2021. 8. 12. 17:14

 

[BOJ] 1806 / 부분 합 / Python 파이썬

[BOJ] 1806 / 부분 합 / Python 파이썬

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

 

1806번: 부분합

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

www.acmicpc.net

 

 

풀이

주어진 수를 주어진 배열의 연속구간의 합으로 만들어지는 경우를 구하는 문제이다.

 

시작점과 끝점을 잡아 구간을 만들어주고 양끝 구간을 더해주고 빼주는 방식으로 풀었다.

 

 

N, S = map(int, input().split())

nums = list(map(int, input().split()))

s, e = 0, 1
add = nums[0]
res = N+1

while True:
    if e == N and add < S:
        break

    if add >= S:
        res = min(res, e-s)
        add -= nums[s]
        s += 1

    elif add < S:
        add += nums[e]
        e += 1

    else:
        add -= nums[s]
        s += 1

print(0 if res == N+1 else res)
Comments