알고리즘Hard#419
투 포인터와 슬라이딩 윈도우의 차이점과 적용 조건을 설명해주세요.
#알고리즘#투포인터#슬라이딩윈도우#배열
답변 포인트
두 인덱스를 움직인다는 공통점은 있지만, 윈도우 크기와 불변 조건 유지 방식이 다릅니다.
정답 및 해설
빠른 요약
투 포인터와 슬라이딩 윈도우는 모두 배열이나 문자열에서 두 개의 인덱스를 사용해 탐색 범위를 줄이는 기법입니다. 하지만 문제를 바라보는 관점이 조금 다릅니다.
투 포인터와 슬라이딩 윈도우는 모두 배열이나 문자열에서 두 개의 인덱스를 사용해 탐색 범위를 줄이는 기법입니다. 하지만 문제를 바라보는 관점이 조금 다릅니다.
투 포인터는 보통 정렬된 배열에서 양끝을 좁혀가거나, 두 배열을 병합하듯 이동하는 방식에 많이 쓰입니다. 예를 들어 정렬된 배열에서 두 수의 합이 target인지 찾을 때 left와 right를 조건에 따라 움직입니다.
슬라이딩 윈도우는 연속된 구간을 하나의 창으로 보고, 창 안의 상태를 유지하면서 이동합니다. 고정 길이 k의 최대합, 중복 없는 가장 긴 부분 문자열처럼 “연속 구간”이 핵심인 문제에 적합합니다.
JavaScript
function maxSum(nums, k) {
let sum = 0;
for (let i = 0; i < k; i++) sum += nums[i];
let best = sum;
for (let right = k; right < nums.length; right++) {
sum += nums[right] - nums[right - k];
best = Math.max(best, sum);
}
return best;
}적용 조건은 “포인터를 되돌리지 않아도 되는가”입니다. 한 번 지나간 후보를 다시 볼 필요가 없다면 O(n)으로 줄일 가능성이 있습니다.