January 15, 2023

투 포인터 (Two Pointers)


알고리즘


n = 5
m = 5
data = [1, 2, 3, 2, 5]

count = 0
interval_sum = 0
end = 0

for start in range(n):
    while interval_sum < m and end < n:
        interval_sum += data[end]
        end += 1
    if (interval_sum == m):
        count += 1
    interval_sum -= data[start]

print(count)
  1. 시작점과 끝점이 첫 번째 원소의 인덱스를 가리키도록 한다.
  2. 현재 부분 합이 M과 같다면 카운트한다.
  3. 현재 부분 합이 M보다 작다면, end를 1 증가시킨다.
  4. 현재 부분합이 M보다 크거나 같다면, start를 1 증가시킨다.
  5. 모든 경우를 확인할 때까지 2번부터 4번의 과정을 반복한다.

참고 링크


[이것이 코딩 테스트다 with Python] 39강 투 포인터