투 포인터
문제left
와 right
를 정해서 값이 작으면 더해주고 크면 빼주고 같으면 count를 세주는 형식으로 진행한다.투 포인터는 기준
이 있고,
기준보다 작으면 현재 right인덱스에 해당하는 값을 더하고 right인덱스 증가.
기준보다 크면 left인덱스에 해당하는 값을 삭제하고 left인덱스 증가.
n, m = map(int, input().split())
arr = list(map(int, input().split()))
left = right = count = sm = 0
while left != n:
if sm < m and right !=n:
sm += arr[right]
right += 1
else:
sm -= arr[left]
left += 1
if sm == m:
count += 1
print(count)
<중요포인트>
sum
이m
보다 더 작을 때right
가n
을 넘어가면sum
이 더 증가할 수 없으므로 종료해도 상관없다.
def solve():
left = right = ans = s = 0
while True:
if s >= m:
s -= a[left]
left += 1
else:
if right == n:
break
s += a[right]
right += 1
if s == m:
ans += 1
return ans
투 포인터
사용법에 대해 기억해두자.rebas님 블로그