슬라이딩 윈도우 알고리즘은 배열이나 문자열과 같은 선형 자료구조에서
일정 크기의 창(window)을 만들고 이동시키면서 원하는 결과를 찾는 알고리즘입니다
슬라이딩 윈도우는 창(window)을 이용해 다음과 같은 방식으로 작동합니다
먼저 창의 크기를 정한 후, 시작 지점에서부터 창 크기만큼 요소를 포함시킵니다
창을 오른쪽으로 한 칸씩 이동시키면서 창 안의 요소를 기준으로 연산을 수행합니다
이동할 때 창에서 빠지는 요소와 새로 들어오는 요소만을 이용하여 이전에 계산한 값을 갱신합니다
LeetCode 2025-03-09 데일리 문제는 대표적으로 슬라이딩 윈도우 알고리즘을 통해 해결할 수 있습니다
colors 배열의 길이가 10^5 이므로 브루트포스로는 해결할 수 없기 때문에
O(n)의 시간 복잡도로 해결할 수 있는 슬라이딩 윈도우 알고리즘을 적용해야 합니다
int left = 0;
int right = 1;
while(right < len){
if(arr[right] == arr[right-1]){
left = right;
right++;
continue;
}
right++;
if(right - left < k){
continue;
}
ans++;
left++;
}
이처럼 window 크기를 초반에 고정시키지 않고,
탐색 도중 윈도우 크기에 도달하는 순간 고정하는 방법으로도 응용할 수 있습니다
슬라이딩 윈도우는 연속된 데이터에서 최적의 결과를 찾는 데 매우 유용한 알고리즘입니다
이를 통해 시간복잡도를 줄이고, 원하는 결과를 빠르게 찾을 수 있습니다
알고리즘 잘 푸시네요