N, M = map(int, input().split())
numbers = list(map(int, input().split()))
left = 0
right = left + 1
cur_sum = numbers[left]
count = 0
while right < len(numbers):
if cur_sum == M:
count += 1
cur_sum -= numbers[left]
left += 1
elif cur_sum < M:
cur_sum += numbers[right]
right += 1
elif cur_sum > M:
cur_sum -= numbers[left]
left += 1
while left < len(numbers):
if cur_sum == M:
count += 1
cur_sum -= numbers[left]
left += 1
elif cur_sum > M:
cur_sum -= numbers[left]
left += 1
else:
break
print(count)
알고리즘을 오랜만에 해서 그런지, 투포인터 문제라는 것을 알고도 배열이 정렬이 안되어있는데 투포인터를 어떻게 쓰지하고 고민을 했다.
import sys
n, target = map(int, input().split())
arr = list(map(int, input().split()))
lo, high = 0,1
tmp = arr[lo]
cnt = 0
while lo < n:
if high==n and tmp < target:
break
if target == tmp:
cnt +=1
tmp -= arr[lo]
lo +=1
elif tmp < target:
tmp += arr[high]
high +=1
elif tmp > target:
tmp -= arr[lo]
lo +=1