[ 슬라이딩 윈도우 ] 슬라이딩 윈도우 이론 정리

2025. 5. 25. 16:59·알고리즘/알고리즘 공부

1. 슬라이딩 윈도우란?

슬라이딩 윈도우(Sliding Window) 알고리즘은 고정된 크기 또는 가변 길이의 부분 구간(subarray) 을 배열이나 문자열에서 연속적으로 이동시키면서 특정 값을 계산하는 기법입니다.

이름 그대로 "창문(window)"을 왼쪽에서 오른쪽으로 조금씩 밀면서 처리한다는 의미로,
매번 전체 범위를 새로 계산하지 않고 이전 결과를 재활용하여 효율적으로 처리할 수 있습니다.

 

 

2. 언제 사용하는가?

슬라이딩 윈도우는 다음과 같은 경우에 주로 사용됩니다:

  • 고정 길이 구간의 최댓값, 최솟값, 합 등을 구하는 문제
  • 가변 길이 구간에서 어떤 조건을 만족하는 최소/최대 구간 찾기
  • 문자열에서 중복 문자 없는 가장 긴 부분 문자열 찾기
  • 일정 범위 내에서 조건이 유지되는 구간 탐색

 

3. 슬라이딩 윈도우 동작 방식

1) 고정 길이 윈도우

정해진 길이 k만큼의 윈도우를 좌우로 밀어가며 합이나 평균 등을 구함

arr = [1, 3, 2, 6, 4, 5]
k = 3

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

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

 

  • 핵심: 새 구간 = 이전 구간 - 맨 앞 값 + 맨 뒤 값
  • O(N) 시간에 전체 탐색 가능

2) 가변 길이 윈도우 (조건 만족하는 구간 탐색)

조건을 만족하지 않으면 오른쪽 포인터(end)를 늘리고,
조건을 초과하면 왼쪽 포인터(start)를 줄이는 구조

arr = [1, 2, 3, 2, 5]
target = 7

start = 0
current_sum = 0
min_length = float('inf')

for end in range(len(arr)):
    current_sum += arr[end]

    while current_sum >= target:
        min_length = min(min_length, end - start + 1)
        current_sum -= arr[start]
        start += 1

 

  • start, end는 모두 오른쪽으로만 이동
  • 구간 길이가 유동적일 때 유용

3) 원형 배열 슬라이딩 윈도우 (회전초밥 문제)

일반 슬라이딩 윈도우는 배열 끝에 도달하면 끝이지만,
원형 배열에서는 끝에서 다시 처음으로 이어지기 때문에 인덱스를 순환(circular) 시켜야 한다.
이런 구조는 모듈로 연산 (%)으로 쉽게 구현할 수 있음.

 

 

 

4. 구현 팁

  • 누적합을 한 번 계산한 뒤, 그걸 바탕으로 윈도우를 조정하면 시간 복잡도를 줄일 수 있음
  • 매번 전체 구간을 다시 계산하지 않기: 슬라이딩 윈도우의 핵심은 재활용
  • 가변 길이인 경우, 조건 만족 여부에 따라 start를 조정해야 함
  • 문자열에서는 set이나 dict를 활용해 중복 여부나 등장 횟수를 관리할 수 있음

 

 

 

'알고리즘 > 알고리즘 공부' 카테고리의 다른 글

[ 유니온 파인드 ] 유니온 파인드 이론 정리  (0) 2025.05.27
[ 완전탐색 ] 완전탐색(Brute Force) 알고리즘 이론정리  (0) 2025.05.13
[ 그리디 ] 그리디 알고리즘 정리  (0) 2025.05.06
[ 분할정복 ] 분할정복 이론 정리  (0) 2025.04.29
[ 이분탐색 ] 이분탐색 이론 정리  (0) 2025.04.29
'알고리즘/알고리즘 공부' 카테고리의 다른 글
  • [ 유니온 파인드 ] 유니온 파인드 이론 정리
  • [ 완전탐색 ] 완전탐색(Brute Force) 알고리즘 이론정리
  • [ 그리디 ] 그리디 알고리즘 정리
  • [ 분할정복 ] 분할정복 이론 정리
swallow8801
swallow8801
  • swallow8801
    제비집
    swallow8801
  • 전체
    오늘
    어제
    • 분류 전체보기 (59)
      • KT AIVLE SCHOOL (16)
        • 복습노트 (7)
        • 스터디 (5)
        • 프로젝트 (4)
        • 빅프로젝트 (0)
      • 알고리즘 (43)
        • 백준 (27)
        • 알고리즘 공부 (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    웹크롤링
    BOJ
    KT 에이블스쿨
    2609
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
swallow8801
[ 슬라이딩 윈도우 ] 슬라이딩 윈도우 이론 정리
상단으로

티스토리툴바