DSData StructuresPython learning path
0 / 12 완료
LESSON 10

슬라이딩 윈도

연속 구간을 한 칸씩 옮기며 이전 계산을 재사용하는 패턴

왜 슬라이딩 윈도을 쓸까요?

고정 또는 가변 길이의 연속 구간을 모두 검사할 때 매 구간을 처음부터 계산하지 않기 위해 씁니다. 새 값은 넣고 오래된 값은 빼며 O(n²)을 O(n)으로 줄일 수 있습니다.

LIFE EXAMPLE

생활 속에서 먼저 이해해 볼까요?

코드를 생각하지 말고, 아래 상황이 어떤 순서로 움직이는지만 따라가 보세요.

현실 예시 1

최근 7일 평균 걸음 수

화요일이 되면 지난주 월요일 기록은 빼고 이번 월요일 기록만 더해 새 평균을 냅니다.

자료구조와 연결하면7일을 매번 다시 더하지 않고 나간 값과 들어온 값만 반영합니다.
현실 예시 2

CCTV 최근 10초

지금으로부터 10초 안의 움직임만 보고 싶다면 오래된 장면은 버리고 새 장면을 계속 넣습니다.

자료구조와 연결하면관심 구간이 시간과 함께 한 칸씩 움직이는 슬라이딩 윈도입니다.

실무에서는 이렇게 씁니다

코딩 테스트의 장난감 예제를 넘어, 실제 시스템에서 같은 원리가 어디에 숨어 있는지 연결해 보세요.

01

모니터링

최근 5분 요청량·오류율·최댓값을 계속 갱신합니다.

02

이상 탐지

연속 구간의 평균과 현재 값의 차이를 비교합니다.

03

문자열 처리

조건을 만족하는 최소 길이 부분 문자열을 찾습니다.

04

카드 부정 사용 감지

최근 짧은 시간에 반복된 결제 횟수와 금액을 계속 확인합니다.

05

미디어 버퍼

최근 N개 음성 샘플의 평균 크기를 갱신해 잡음을 감지합니다.

어떤 원리로 동작하나요?

왼쪽과 오른쪽 경계가 배열 위를 한 방향으로 이동합니다. 단순 합은 뺄 값과 더할 값만 갱신하고, 최댓값은 값이 감소하는 deque를 유지해 각 원소가 한 번씩 들어오고 나가게 합니다.

핵심 연산과 비용

연산Python 표현시간
고정 구간 합add right, remove leftO(n)
가변 창two pointersO(n)
구간 최댓값monotonic dequeO(n)
매번 maxmax(window)O(nk)
STEP BY STEP

크기 3 최댓값: [1, 3, 2, 5]

  1. 1
    1 처리deque=[1]
  2. 2
    3 처리작은 1 제거 → deque=[3]
  3. 3
    2 처리deque=[3,2], 첫 창 최댓값 3
  4. 4
    5 처리3,2 제거 → deque=[5], 다음 최댓값 5

⚠ 자주 하는 실수

  • ‘연속된 구간’이 아닌 조합 문제에는 슬라이딩 윈도가 맞지 않습니다.
  • deque에는 값보다 인덱스를 저장해야 창 밖 원소를 판별하기 쉽습니다.
  • 창의 왼쪽·오른쪽 포함 여부를 코드 전체에서 일관되게 유지합니다.