Learning
토픽 63 / 82

Two Pointers (투 포인터)

Two Pointers (투 포인터)

배열이나 리스트에서 두 개의 포인터를 사용하여 조건을 만족하는 구간이나 쌍을 O(N) 시간에 찾는 기법으로, 정렬된 배열이나 연속 구간 문제에 효과적

목적: 선형 시간 탐색, 구간 문제 해결, 쌍 찾기, 부분 배열 문제

특징: 두 포인터 이동, O(N) 시간, 정렬 필요(경우에 따라), 단조성 활용

유형

  • 양끝에서 시작: 정렬된 배열에서 합이 특정 값인 쌍 찾기
  • 같은 방향: 연속 부분 배열, Sliding Window와 유사
  • 서로 다른 배열: 두 배열 병합, 교집합 찾기

대표 문제

  • 두 수의 합: 정렬 후 양끝에서 시작, 합에 따라 left++/right--
  • 연속 부분 배열 합: left, right 같은 방향, 합에 따라 right++/left++
  • 팰린드롬 검사: 양끝에서 시작하여 중앙으로

동작 원리

  • 양끝: left=0, right=n-1, 조건에 따라 한쪽 이동
  • 같은 방향: left, right 모두 0에서 시작, right 확장 후 left 수축

시간 복잡도: O(N) 또는 O(N log N) (정렬 포함)

공간 복잡도: O(1) (추가 공간 없음)

장점: 선형 시간, 추가 공간 없음, 직관적

단점: 정렬 필요(경우에 따라), 단조성 조건, 문제 유형 제한

적용사례: 두 수의 합, 세 수의 합, 물 채우기, 부분 배열 합

비교: Two Pointers(O(N)/제한적) vs 이분탐색(O(N log N)/범용) vs 해시(O(N)/공간)

연관: 정렬, 이분 탐색, Sliding Window, 구간 문제