슬라이딩 윈도·연습 문제

슬라이딩 윈도 최댓값

문제 설명PROBLEM

슬라이딩 윈도 최댓값

왜 이 문제를 푸나요?

겹치는 구간마다 max를 다시 계산하지 않고, 다음 구간에도 쓸 후보만 유지하는 고급 최적화 문제입니다. 각 원소가 한 번 들어오고 나가 O(n)이 되는 구조를 익힙니다.

익혀야 할 개념

  • 슬라이딩 윈도
  • 단조 감소 덱
  • 인덱스 만료
  • 분할 상환 O(n)

과제

정수 리스트의 길이 k인 모든 연속 구간에 대해 최댓값을 반환하세요. 중첩 반복이나 매 구간의 max() 대신 인덱스를 저장하는 단조 감소 덱을 사용합니다. k는 1 이상이고 리스트 길이 이하입니다.

함수

sliding_window_max(numbers, k)

목표 복잡도

시간 O(n), 공간 O(k)

테스트 케이스

실행하면 아래 순서대로 채점합니다. print() 출력도 이 순서대로 쌓입니다.

#이름numbersk기대값
1대표 예제[1, 3, -1, -3, 5, 3, 6, 7]3[3, 3, 5, 5, 6, 7]
2감소 수열[9, 7, 5, 3]2[9, 7, 5]
3윈도 1[2, 1, 4]1[2, 1, 4]
4전체가 한 윈도[4, 1, 9, 2]4[9]
5최댓값 중복[2, 5, 5, 1]2[5, 5, 5]

Python 표준 라이브러리는 사용할 수 있습니다. 함수 이름과 매개변수는 제시된 형태를 유지하세요.

개념 노트와 실수 포인트

슬라이딩 윈도

  • 연속 구간이 한 칸 이동할 때 이전 계산을 재사용합니다.
  • 단조 큐를 사용하면 각 원소가 한 번씩 들어가고 나와 전체 O(n)에 최댓값을 구할 수 있습니다.