728x90
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
풀이
n,m = map(int, input().split())
a = list(map(int, input().split()))
# 투 포인터
lt=0
rt=1
tot=a[0]
cnt=0
while True:
if tot<m:
if rt<n:
tot+=a[rt]
rt+=1
else: # 작은데 더이상 더할 것이 없음
break
elif tot==m:
cnt+=1
# 계속 진행해야 하기 때문에
tot-=a[lt]
lt+=1
else:
tot-=a[lt]
lt+=1
print(cnt)
728x90