리스트에서 순차적으로 접근하려고 할 때 두 개의 포인터를 사용하여 원하는 값을 찾거나 구간 합, 반복 등의 처리를 할 때 유용한 알고리즘
예제 코드 1 : N-1 Root
array.sort() # 오름차순 정렬
start, end = 0, n-1
while start<end:
Sum = array[start] + array[end]
if Sum > target:
start += 1
elif Sum < target:
end -= 1
else:
count += 1
start += 1
end -= 1
예제 코드 2 : N-2 Root
n = 5 # 데이터의 개수 N
m = 5 # 찾고자하는 부분합 M
count = 0
interval_sum = 0
end = 0
# start를 차례대로 증가시키며 반복
for start in range(n):
# end만큼 이동시키기
while interval_sum < m and end < n:
interval_sum += data[end]
end += 1
# 부분합이 m일 때 카운트 증가
if interval_sum == m:
count += 1
interval_sum -= data[start]
print(count)