알고리즘/개념

슬라이딩 윈도우(Sliding Window)

댕주 2025. 3. 26. 02:03

슬라이딩 윈도우(Sliding Window)

알고리즘 문제를 풀다 보면, 배열이나 문자열과 같이 연속된 구간에 대한 처리가 필요할 때가 있을텐데,

이때 슬라이딩 윈도우 기법을 사용하면 도움이 된다.


1. 슬라이딩 윈도우란?

슬라이딩 윈도우 기법은 두 개의 포인터(또는 인덱스)를 사용하여

배열이나 문자열의 특정 구간(윈도우)를 유지하면서 문제를 해결하는 방법이다.

이 기법은 주로 다음과 같은 상황에서 유용하게 사용된다.

  • 연속된 구간의 합 구하기
  • 특정 조건을 만족하는 최대 또는 최소 길이 구하기
  • 중복이 없는 가장 긴 구간 찾기 등

2. 기본 아이디어

슬라이딩 윈도우는 아래의 단계를 반복하면서 문제를 해결한다.

  • 윈도우 정의
    시작 인덱스(left)와 끝 인덱스(right)를 두어 구간을 정의한다.

  • 윈도우 확장
    right 포인터를 이동시키면서 윈도우에 새로운 요소를 추가한다.

  • 조건 만족 여부 확인
    윈도우에 포함된 요소에 대해 문제에서 요구하는 조건(예: 중복이 없는지, 합이 특정 값 이하인지 등)을 확인한다.

  • 윈도우 축소
    조건을 만족하지 못하는 경우, left 포인터를 이동시켜 윈도우에서 요소를 제거한다.

  • 최적값 갱신
    조건을 만족하는 윈도우가 등장하면, 해당 윈도우의 길이와 합 등 문제에서 요구하는 값을 갱신한다.

3. 시간 복잡도

슬라이딩 윈도우의 시간 복잡도는 일반적으로 배열이나 문자열을 한 번만 탐색하기 때문에 O(N)으로 매우 효율적이다


4. 예시 풀어보기(Python)

[주어진 배열에서 합이 특정 값 이하인 연속된 부분 배열 중 최대 길이 구하기]
nums = [1, 3, 2, 5, 1, 1, 2, 3]
max_sum = 7

풀이 보기

더보기
nums = [1, 3, 2, 5, 1, 1, 2, 3]
max_sum = 7

left, total = 0, 0
max_length = 0

for right in range(len(nums)):
    total += nums[right]  # 윈도우 확장 (새로운 요소 추가)

    # 조건을 만족하지 않을 때까지 윈도우 축소
    while total > max_sum:
        total -= nums[left]
        left += 1

    # 조건을 만족하는 최대 길이 갱신
    max_length = max(max_length, right - left + 1)

print(max_length)  # 결과: 4 ([2,5] 또는 [5,1,1] 등)

'알고리즘 > 개념' 카테고리의 다른 글

투포인터(Two Pointer)  (1) 2025.03.30
비트마스킹(Bit Masking)  (0) 2025.02.16