Two Pointer

jelly·2025년 4월 2일

투 포인터(Two Pointers) 개념
투 포인터 알고리즘은 배열이나 리스트에서 두 개의 포인터(인덱스)를 활용하여 문제를 해결하는 기법이다. 주로 정렬된 배열에서 특정 조건을 만족하는 부분을 찾거나 최적화하는 데 사용된다.

투 포인터의 일반적인 사용처
정렬된 배열에서 두 수의 합 찾기 (Two Sum 문제)

구간(부분 배열) 합 찾기 (Subarray Sum 문제)

두 개의 정렬된 배열 병합 (Merge Two Sorted Arrays)

펠린드롬(회문) 검사

최대 길이의 연속된 부분 구간 찾기

C++ 예제
1. 정렬된 배열에서 두 수의 합 찾기

#include <iostream>
#include <vector>
using namespace std;

bool twoSum(vector<int>& arr, int target) {
    int left = 0, right = arr.size() - 1;

    while (left < right) {
        int sum = arr[left] + arr[right];

        if (sum == target) {
            cout << "찾은 값: " << arr[left] << " + " << arr[right] << " = " << target << endl;
            return true;
        } else if (sum < target) {
            left++;  // 합이 작으면 왼쪽 포인터 증가
        } else {
            right--; // 합이 크면 오른쪽 포인터 감소
        }
    }
    return false;
}

int main() {
    vector<int> arr = {1, 2, 3, 5, 7, 10, 12};
    int target = 9;

    if (!twoSum(arr, target)) {
        cout << "해당 합을 만족하는 두 수가 없습니다." << endl;
    }
    return 0;
}
profile
jelly

0개의 댓글