본문 바로가기
프로그래밍/알고리즘 & 자료구조

백준 1806 : 부분합 with 파이썬

by Play_With 2024. 1. 30.
반응형

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

 

1806번: 부분합

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

www.acmicpc.net

 

# 포인트

1. ans에 최대 갯수를 설정하고, min() 함수를 통해 최소 갯수 갱신

2. 투 포인터인 앞쪽 인덱스 i와 뒤쪽 인덱스인 j 만들기

3. while 문을 돌며 최소갯수를 찾다가 뒤쪽 인덱스가 총갯수에 도달하면 break

 

N, S = map(int,input().split())
nums = list(map(int,input().split()))
i, j = 0, 0
s = nums[0]
ans = 100001
 
while True:
    if s == S:
        ans = min(ans, j - i + 1)
        s-=nums[i]
        i+=1

    elif s>S:
        s-=nums[i]
        ans = min(ans, j - i + 1)
        i+=1

    else:
        j += 1
        if j == N:
            break
        s += nums[j]
 
print(0) if ans == 100001 else print(ans)
반응형

댓글