|

슬라이딩 윈도우란 무엇일까: 투 포인터와 차이를 코딩테스트 기준으로 정리

슬라이딩 윈도우란 무엇일까 대표 이미지
슬라이딩 윈도우는 구간을 밀면서 정보를 재사용하는 데 강한 패턴이다

슬라이딩 윈도우란 무엇일까라는 질문은 구간 문제를 풀다가 자주 나옵니다. 처음 보면 투 포인터와 비슷해 보여서 둘을 거의 같은 기법처럼 생각하기 쉽습니다. 하지만 강조점은 조금 다릅니다.

이번 글에서는 슬라이딩 윈도우를 현재 구간 정보를 재사용하면서 한 칸씩 미는 방식으로 보고, 투 포인터와의 차이를 코딩테스트 기준으로 정리하겠습니다. 특히 고정 길이 구간과 가변 길이 구간의 감각을 분리해서 설명하겠습니다.

슬라이딩 윈도우란 무엇일까 요약 카드
핵심을 빠르게 잡아주는 요약 카드

슬라이딩 윈도우를 가장 쉽게 설명하면

슬라이딩 윈도우는 구간 하나를 잡아 놓고, 그 구간을 한 칸씩 옆으로 밀면서 필요한 정보를 갱신하는 방식입니다. 핵심은 매번 새 구간을 처음부터 계산하지 않고, 이전 구간 정보를 재사용한다는 점입니다.

window_sum = sum(arr[:k])
answer = window_sum

for right in range(k, len(arr)):
    window_sum += arr[right]
    window_sum -= arr[right-k]
    answer = max(answer, window_sum)

슬라이딩 윈도우는 자료구조보다 문제 패턴 이름에 가깝지만, queue/deque 같은 자료구조 성질와 연결해서 보면 왜 구간 이동 시 재사용이 중요한지 이해가 쉬워집니다.

이 예시는 고정 길이 윈도우의 대표 형태입니다. 한 칸 밀 때 새로 들어오는 값은 더하고, 빠지는 값은 빼면 됩니다.


투 포인터와는 무엇이 다를까

투 포인터는 보통 왼쪽 포인터와 오른쪽 포인터를 움직이며 조건을 만족하는 범위를 찾는 데 초점이 있습니다. 반면 슬라이딩 윈도우는 현재 구간의 합, 빈도, 최댓값 같은 정보를 유지한 채 구간을 옮기는 감각이 더 강합니다.

  1. 투 포인터: 조건을 만족하는 범위를 찾는 데 초점
  2. 슬라이딩 윈도우: 현재 구간 정보를 업데이트하며 이동하는 데 초점

물론 둘이 겹치는 문제도 많습니다. 하지만 “구간 길이가 고정돼 있나?”, “현재 구간 정보를 유지해야 하나?”를 먼저 보면 구분이 쉬워집니다.


문제에서 어떤 신호가 보이면 슬라이딩 윈도우일까

  • 길이가 K인 연속 구간을 모두 봐야 한다
  • 구간을 한 칸 움직일 때 정보 일부만 바뀐다
  • 합, 빈도수, 최대/최소 같은 정보를 계속 유지해야 한다
  • 매번 부분 배열을 다시 계산하면 낭비가 크다

즉 문제에서 “연속된 구간을 이동하며”라는 느낌이 강하면 슬라이딩 윈도우를 먼저 떠올려 볼 만합니다.


자주 하는 실수

  1. 고정 길이 윈도우인데 매번 합을 다시 계산한다
  2. 가변 길이 투 포인터 문제를 슬라이딩 윈도우와 구분하지 못한다
  3. 윈도우에서 빠지는 값과 들어오는 값을 갱신하지 않는다
  4. 사실은 누적합이 더 쉬운 문제인데 억지로 윈도우로 푼다

즉 슬라이딩 윈도우는 “구간을 밀 때 바뀌는 정보가 적다”는 점이 핵심입니다. 이 재사용 감각이 잡히면 시간초과를 크게 줄일 수 있습니다.

비슷한 흐름은 누적합 글, 경계 판단은 이분 탐색 글과 함께 보면 더 정리됩니다.


슬라이딩 윈도우란 무엇일까 흐름 그림
핵심 흐름을 그림으로 다시 정리한 이미지

마무리

슬라이딩 윈도우는 구간을 움직일 때 이전 계산을 재사용하는 패턴입니다. 그래서 매번 처음부터 다시 보는 방식보다 훨씬 효율적일 수 있습니다.

즉 슬라이딩 윈도우를 떠올리는 핵심은, 현재 구간 정보를 계속 유지한 채 한 칸씩 이동할 수 있는가를 먼저 보는 일입니다.

함께보면 좋은 글