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

 

2003번: 수들의 합 2

첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.

www.acmicpc.net

문제

수열의 구간합이 M을 만족하는 경우의 수를 구하시오

입력

첫 번째 줄 => N: 수열의 원소의 개수 M: 구간합이 만족해야하는 조건

두 번째 줄 => 수열

풀이

# 2003번 수들의 합 2
# 투 포인터 알고리즘 사용
N, M = map(int, input().split())
arr = list(map(int, input().split()))

count = 0
end = 0
interval_sum = 0

for start in range(N):
    while interval_sum < M and end < N:
        interval_sum += arr[end]
        end += 1
    if interval_sum == M:
        count += 1
    interval_sum -= arr[start]

print(count)

출력결과

개발자 성현