[알고리즘] 슬라이딩 윈도우 풀이 가이드

2025. 7. 14. 11:34·CS/알고리즘 & 자료구조
728x90
반응형

개념

창문을 한칸 씩 이동해서 문제가 요구하는 조건을 체크하는 것입니다.
가이드 순서는 아래와 같습니다.

  1. 윈도우에 담을 기존 원소(데이터)를 확인합니다.
  2. 윈도우의 left, right 포인터를 0부터 시작합니다.
    • left는 윈도우의 왼쪽 끝, right는 왼도우의 오른쪽 끝을 나타냅니다.
    • 조건에 따라 시작 지점은 변경합니다.
  3. right를 하나씩 증가시키면서 배열을 순회합니다.
    • right가 증가할 때마다 기존 데이터를 기반으로 새로운 원소(데이터)를 반영합니다.
  4. 윈도우에 추가된 원소를 문제의 조건에 맞춰 처리합니다.
    • left ~ right를 순회해서 처리합니다.
    • 예 빈도수 계산, 함계 계산, 최댓값/최솟값 업데이트 등
  5. 문제의 조건을 벗어나면(right 로직 마지막) 조건을 만족할 때까지 left 포인터를 오른쪽으로 이동시킵니다.
    • 이 과정에서 윈도우에서 원소가 갱신됩니다.
    • 윈도우의 유효셩을 체크합니다.
  6. 매번 윈도우를 업데이트할 때마다 결과를 저장하거나 갱신합니다.

Java 코드로 확인해보자

윈도우 내의 합 문제

int[] arr = {1, 3, 2, 5, 1, 1, 2, 3};
int targetSum = 8;

// 슬라이딩 윈도우의 두 포인터 left, right 선언
int left = 0, windowSum = 0;

// right를 기준으로 배열 전체를 순회
for (int right = 0; right < arr.length; right++) {

    // right가 가리키는 원소를 윈도우에 포함
    windowSum += arr[right];

    // 윈도우 내 합이 조건(targetSum)을 초과하면, 초과하지 않을 때까지 left를 오른쪽으로 이동
    while (windowSum > targetSum) {
        windowSum -= arr[left]; // left 원소를 윈도우에서 제거
        left++;                 // left 포인터 이동
    }

    // 조건을 만족하면 현재 윈도우 범위를 출력
    if (windowSum == targetSum) {
        System.out.println("조건 만족 윈도우: [" + left + ", " + right + "]");
    }
}

코드 흐름을 간단하게 정리하면

right로 원소 추가 → 윈도우 합 증가하고
조건을 만족하지 않으면 left로 원소 제거 → 윈도우 합 감소
조건 만족 시 현재 윈도우 범위 출력


슬라이딩 윈도우가 유용한 문제 유형은?

  • 연속된 구간의 합 또는 특정 조건을 만족하는 부분 배열 찾기
  • 최대 길이 부분 배열, 최소 길이 부분 배열 찾는 문제
  • 문자열 또는 배열에서 중복 제거 후 연속 구간 찾기 문제

요약

두 포인터로 윈도우 범위를 유지하고 right 순회에서 원소 추가하고, left로 조건을 유지하는 것입니다.

728x90
반응형
저작자표시 비영리 (새창열림)

'CS > 알고리즘 & 자료구조' 카테고리의 다른 글

[알고리즘] DFS(Depth-First Search, 깊이 우선 탐색) 문제 풀이 가이드  (2) 2025.07.14
알고리즘 초보 탈출: DP(동적계획법)을 명확하게 이해하는 방법  (3) 2025.06.29
[수학적 처리] 증명된 수식을 로직으로  (1) 2025.06.27
[백준] BOJ 1874 스택 수열  (1) 2025.06.09
[백준] 숫자 카드 2  (0) 2025.06.09
'CS/알고리즘 & 자료구조' 카테고리의 다른 글
  • [알고리즘] DFS(Depth-First Search, 깊이 우선 탐색) 문제 풀이 가이드
  • 알고리즘 초보 탈출: DP(동적계획법)을 명확하게 이해하는 방법
  • [수학적 처리] 증명된 수식을 로직으로
  • [백준] BOJ 1874 스택 수열
크크크크
크크크크
공뷰를 합시다.
    반응형
  • 크크크크
    Tom's Note
    크크크크
  • 전체
    오늘
    어제
    • 분류 전체보기 (130)
      • IT 지식 (6)
      • CS (66)
        • 알고리즘 & 자료구조 (19)
        • 운영체제 (41)
        • 네트워크 (1)
        • 데이터베이스 (5)
      • 보안 (6)
      • SW 공학 & 프로그래밍 언어 (5)
        • Java (28)
        • 디자인 패턴 (1)
        • 형상관리 (2)
        • 톰캣(WAS) (2)
        • SW 방법론 (3)
        • 스프링부트 (5)
      • 시스템 설계 (4)
        • Docker (2)
      • 자격증 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      usermod
      /etc/passwd
      리눅스
      스프링부트
      which
      passwd
      문제해결
      DTO
      알고리즘
      java
      단반향
      불변
      cifs
      su
      Chage
      chmod
      whatis
      docker
      ADsP
      1급
      자바
      whereis
      분석기법
      apropos
      암호설정
      DI
      비트연산
      2차
      man
      REST API
    • 최근 댓글

    • 최근 글

    • 250x250
    • hELLO· Designed By정상우.v4.10.3
    크크크크
    [알고리즘] 슬라이딩 윈도우 풀이 가이드
    상단으로

    티스토리툴바