알고리즘/알고리즘 정리
[Algorithm] 슬라이딩 윈도우(Sliding Window) 알고리즘 with Java
차나니
2024. 2. 4. 17:00
알고리즘에 대한 이해 !
'슬라이딩 윈도우'란 ?
슬라이딩 윈도우라는 말은 옆으로 '한칸씩 슬라이딩한다 .'라는 말과 배열의 그림이 창문을 모아놓은 것 같아 슬라이딩 윈도우라는 명칭이 되었다고 어디서 들은 것 같아요 !
1차원 배열을 2회 이상 반복적으로 탐색해야 할 경우 O(n^2) 이상이 걸릴 시간 복잡도를 부분 배열을 활용하여 O(n)으로 줄일 수 있는 장점이 있습니다.
부분 배열들을 활용하여 특정 조건을 일치시키는 알고리즘 이지만 부분 배열 길이가 고정적입니다.
어떤 창문을 왼쪽부터 오른쪽으로 밀어 오면서 창문 안에 있는 값들을 부분 배열이라고 생각하면 될 것 같습니다 !
0부터 n까지의 배열에서 최대의 합을 찾으려면 아래의 사진과 같이 0~4가지의 합을 먼저 구해 놓은 뒤 5번째 수를 더해주고 0번째 수를 빼주는 식으로 진행할 수 있습니다 !

구현
public static void main() {
int n = 9;
int m = 5;
int[] arr = {1, 3, 2,6, -1, 4, 1, 8, 2};
int answer = 0;
int sum = 0;
for (int i = 0; i < k; i++) sum += arr[i];
answer = sum;
for(int i = k; i < n; i++){
sum += (arr[i] - arr[i - k]);
answer = Math.max(answer, sum);
}
System.out.println(answer);
}