슬라이딩 윈도우는 배열이나 문자열 같은 연속된 데이터에서 “부분 구간”을 효율적으로 다룰 때 쓰는 기법이에요. 보통 두 개의 포인터(또는 인덱스)를 사용해서 현재 보고 있는 구간의 시작(left)과 끝(right)을 관리하고, 구간을 한 칸씩 옮기면서 필요한 정보를 갱신합니다.

여기서 윈도우(window)는 배열이나 문자열에서 현재 주목하고 있는 구간(부분배열)을 가리키는 말합니다. 마치 기차 창문을 통해 보이는 구간만 보는 것처럼, 배열에서도 우리가 한 번에 살펴볼 ‘크기 K짜리 창문’을 생각하는 거죠.


슬라이딩 윈도우의 핵심 아이디어

  1. 초기 구간 설정
  2. 구간 이동과 갱신
  3. 결과 확인

이 과정을 통해 매번 구간을 새로 계산하는 대신 빠져나가는 값·들어오는 값만 업데이트하므로 시간 복잡도를 O(N)으로 줄일 수 있어요.


유형별 슬라이딩 윈도우

구분 설명
고정 크기 윈도우 크기 K가 주어져 있고, 항상 K개의 원소만 고려 (ex. 길이 K 연속 부분배열 합의 최댓값)
가변(투 포인터) 조건을 만족하는 최대/최소 길이를 찾거나 합이 특정 값이 되는 구간(또는 넘지 않는 구간) 찾기 (ex. 합 ≤ S인 가장 긴 부분배열 길이)

  1. 길이 K인 연속 부분배열 합 최댓값

    /**
    * @params {number[]} A
    * @params {number} K
    * @return {number}
    */
    solution(A, K){
    	
    }
    
  2. 중복 없는 가장 긴 부분 문자열

  3. 과일 장수 (Fruit Into Baskets)