
슬라이딩 윈도우란 무엇일까라는 질문은 구간 문제를 풀다가 자주 나옵니다. 처음 보면 투 포인터와 비슷해 보여서 둘을 거의 같은 기법처럼 생각하기 쉽습니다. 하지만 강조점은 조금 다릅니다.
이번 글에서는 슬라이딩 윈도우를 현재 구간 정보를 재사용하면서 한 칸씩 미는 방식으로 보고, 투 포인터와의 차이를 코딩테스트 기준으로 정리하겠습니다. 특히 고정 길이 구간과 가변 길이 구간의 감각을 분리해서 설명하겠습니다.

슬라이딩 윈도우를 가장 쉽게 설명하면
슬라이딩 윈도우는 구간 하나를 잡아 놓고, 그 구간을 한 칸씩 옆으로 밀면서 필요한 정보를 갱신하는 방식입니다. 핵심은 매번 새 구간을 처음부터 계산하지 않고, 이전 구간 정보를 재사용한다는 점입니다.
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 같은 자료구조 성질와 연결해서 보면 왜 구간 이동 시 재사용이 중요한지 이해가 쉬워집니다.
이 예시는 고정 길이 윈도우의 대표 형태입니다. 한 칸 밀 때 새로 들어오는 값은 더하고, 빠지는 값은 빼면 됩니다.
투 포인터와는 무엇이 다를까
투 포인터는 보통 왼쪽 포인터와 오른쪽 포인터를 움직이며 조건을 만족하는 범위를 찾는 데 초점이 있습니다. 반면 슬라이딩 윈도우는 현재 구간의 합, 빈도, 최댓값 같은 정보를 유지한 채 구간을 옮기는 감각이 더 강합니다.
- 투 포인터: 조건을 만족하는 범위를 찾는 데 초점
- 슬라이딩 윈도우: 현재 구간 정보를 업데이트하며 이동하는 데 초점
물론 둘이 겹치는 문제도 많습니다. 하지만 “구간 길이가 고정돼 있나?”, “현재 구간 정보를 유지해야 하나?”를 먼저 보면 구분이 쉬워집니다.
문제에서 어떤 신호가 보이면 슬라이딩 윈도우일까
- 길이가 K인 연속 구간을 모두 봐야 한다
- 구간을 한 칸 움직일 때 정보 일부만 바뀐다
- 합, 빈도수, 최대/최소 같은 정보를 계속 유지해야 한다
- 매번 부분 배열을 다시 계산하면 낭비가 크다
즉 문제에서 “연속된 구간을 이동하며”라는 느낌이 강하면 슬라이딩 윈도우를 먼저 떠올려 볼 만합니다.
자주 하는 실수
- 고정 길이 윈도우인데 매번 합을 다시 계산한다
- 가변 길이 투 포인터 문제를 슬라이딩 윈도우와 구분하지 못한다
- 윈도우에서 빠지는 값과 들어오는 값을 갱신하지 않는다
- 사실은 누적합이 더 쉬운 문제인데 억지로 윈도우로 푼다
즉 슬라이딩 윈도우는 “구간을 밀 때 바뀌는 정보가 적다”는 점이 핵심입니다. 이 재사용 감각이 잡히면 시간초과를 크게 줄일 수 있습니다.
비슷한 흐름은 누적합 글, 경계 판단은 이분 탐색 글과 함께 보면 더 정리됩니다.

마무리
슬라이딩 윈도우는 구간을 움직일 때 이전 계산을 재사용하는 패턴입니다. 그래서 매번 처음부터 다시 보는 방식보다 훨씬 효율적일 수 있습니다.
즉 슬라이딩 윈도우를 떠올리는 핵심은, 현재 구간 정보를 계속 유지한 채 한 칸씩 이동할 수 있는가를 먼저 보는 일입니다.