투 포인터(Two Pointers)는 리스트나 배열에서 두 개의 포인터를 이용하여 원하는 결과를 얻는 알고리즘 기법입니다. 대표적으로 두 개의 포인터를 이용하여 리스트나 배열을 한 번만 순회하면서 원하는 조건을 만족하는 부분을 찾거나, 두 리스트나 배열을 병합하는 작업을 효율적으로 수행할 때 사용됩니다.

투 포인터의 주요 특징:

  1. 두 개의 포인터: 일반적으로 시작과 끝 지점에서 두 개의 포인터를 가리키며, 이를 이용하여 문제를 해결합니다.
  2. 포인터 이동: 두 포인터 중 하나를 이동시키면서 원하는 조건을 만족하는 부분을 찾거나 문제를 해결합니다.
  3. 순회 최소화: 두 개의 포인터를 이용하여 리스트나 배열을 한 번만 순회하면서 문제를 해결할 수 있습니다.

투 포인터의 활용 예시:

파이썬 코드를 통해 투 포인터를 예시로 살펴보겠습니다. 다음은 두 개의 정렬된 배열에서 공통된 원소를 구하는 투 포인터 코드입니다.

def two_pointer_intersection(arr1, arr2):
    ptr1, ptr2 = 0, 0
    intersection = []

    while ptr1 < len(arr1) and ptr2 < len(arr2):
        if arr1[ptr1] == arr2[ptr2]:
            intersection.append(arr1[ptr1])
            ptr1 += 1
            ptr2 += 1
        elif arr1[ptr1] < arr2[ptr2]:
            ptr1 += 1
        else:
            ptr2 += 1

    return intersection

# 두 개의 정렬된 배열
array1 = [1, 3, 5, 7, 9]
array2 = [3, 6, 7, 9, 12]

common_elements = two_pointer_intersection(array1, array2)
print("공통된 원소:", common_elements)

이 코드는 두 개의 정렬된 배열에서 공통된 원소를 구하는 투 포인터 예시입니다. 두 개의 포인터를 사용하여 두 배열을 순회하며 공통된 원소를 찾습니다.

https://github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Algorithm/투포인터 알고리즘.md