본문 바로가기

# 소쿠리 개발 공부방/코테 문제풀이

[BAEKJOON] [1806] 부분합: PYTHON

[1806] 부분합

 

1806번: 부분합

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

www.acmicpc.net

Input

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

Output

  • 첫째 줄에 구하고자 하는 최소의 길이를 출력, 합을 만드는 것이 불가능 하다면 0 출력

 

✨ Solve

  • 투포인터 사용해서 sum 값이 S보다 작은 값들을 구한뒤, 길이 min()으로 비교

 

💻 Code

### 언어 python3, 메모리 42340KB, 시간 120ms

n, s = map(int, input().split())
numbers = list(map(int, input().split()))

sum = numbers[0]
left, right = 0, 0
answer = 100001 # 답이 될 수 없는 값

while True:
    if sum < s:
        right += 1
        if right == n: break
        sum += numbers[right]
    else:
        sum -= numbers[left]
        answer = min(answer, right-left+1)
        left += 1

print(answer if answer != 100001 else 0)