N개의 수로 된 수열이 주어질 때, 연속된 수들의 합이 M이 되는 경우의 수를 구하는 코드 작성
n, m = map(int, input().split())
arr = list(map(int, input().split()))
start = 0
end = 1
count = 0
while start <= end <= n:
s = sum(arr[start:end])
if s < m:
end += 1
elif s == m:
count += 1
end += 1
else:
start += 1
print(count)
N(1 ≤ N ≤ 10,000)
, M(1 ≤ M ≤ 300,000,000)
이라는 조건으로 인해 완전 탐색은 불가능, 따라서 투포인터로 해결start
, end
변수 및 최종 결과(경우의 수)를 저장하기 위한 변수 count
설정while
문으로 인덱스가 n
을 벗어나지 않게 하기 위한 반복 조건 설정sum()
함수를 사용하여 슬라이싱한 배열 내 값들의 합을 매 반복 때마다 m
값과 비교m
보다 작을 경우 인덱스범위 확장(end += 1
)m
보다 클 경우 인덱스범위 축소(start += 1
)