문제 풀이/백준(BOJ)
[Python] 백준 1806번 : 부분합
희조당
2022. 8. 10. 01:28
728x90
https://www.acmicpc.net/problem/1806
1806번: 부분합
첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다.
www.acmicpc.net
💡문제 풀이
투 포인터 문제이다.
투 포인터의 2가지 유형 중 특정 값을 넘는 배열에 대해서 구하면 된다.
누적 값이 S보다 크다면 개수를 따져주고 왼쪽 포인터를 1 늘린다.
S보다 작다면 오른쪽 포인터를 1 늘린다.
✔️ 느낀 점
쉬운 문제였는데 문제를 제대로 안 읽어서 오래 걸렸다. '이상인 값 모두'
💻 코드
N, S = map(int, input().split())
arr = list(map(int, input().split()))
start, end = 0, 0
sum_ = arr[0]
ans = 100001
while True:
if sum_ < S:
end += 1
if end == N: break
sum_ += arr[end]
else:
sum_ -= arr[start]
ans = min(ans, end - start + 1)
start += 1
print(ans if ans != 100001 else 0)