투 포인터는 배열이나 리스트 같은 자료구조에서
두 개의 포인터를 사용해 조건에 맞는 값을 찾아내는 알고리즘입니다
투 포인터는 보통 두 가지 방식을 사용합니다
비교 | 투 포인터 | 슬라이딩 윈도우 |
---|---|---|
포인터 이동 방식 | 양방향 or 같은 방향 | 한 방향 |
구간 크기 | 가변적 | 고정적 |
주요 활용 | 두 수의 합 등 | 연속 구간 내 등 |
백준 2470번 두 용액
문제는 투 포인터의 첫번째 방식으로 해결할 수 있습니다
N의 크기가 10^5 이므로 단순 브루트포스로는 해결할 수 없습니다
해당 문제는 오름차순 정렬 후, 투 포인터 알고리즘으로 해결할 수 있습니다
Arrays.sort(arr);
int left = 0;
int right = n-1;
int ansL = 0;
int ansR = 0;
int ans = Integer.MAX_VALUE;
while(left < right){
int sum = arr[left] + arr[right];
if(Math.abs(sum) < ans){
ans = Math.abs(sum);
ansL = arr[left];
ansR = arr[right];
}
if (sum < 0) {
left++;
}else{
right--;
}
}
위와같이 오름차순 정렬 후, 양 끝 지점에 포인터를 배치합니다
포인터 위치의 값이 0보다 작다면 left를 이동하고, 아닌 경우 right를 이동하여
가장 적합한 정답을 찾습니다
투 포인터는 배열이나 리스트 같은 자료구조에서 특정 조건을 만족하는 값을
빠르게 찾고 싶을 때 사용됩니다
슬라이딩 윈도우 알고리즘과 유사하지만, 포인터의 이동 방식과 구간 크기에서 차이가 있습니다