11003번_최솟값 찾기

sz L·2023년 2월 20일
0

백준 알고리즘

목록 보기
16/32
post-thumbnail

문제
N개의 수 A1, A2, ..., AN과 L이 주어진다.

Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다.

입력
첫째 줄에 N과 L이 주어진다. (1 ≤ L ≤ N ≤ 5,000,000)

둘째 줄에는 N개의 수 Ai가 주어진다. (-109 ≤ Ai ≤ 109)

출력
첫째 줄에 Di를 공백으로 구분하여 순서대로 출력한다.

예제 입력 1
12 3
1 5 2 3 6 2 3 7 3 5 2 6
예제 출력 1
1 1 1 2 2 2 2 2 3 3 2 2

from collections import deque
N, L = map(int, input().split())
mydeque = deque()
now = list(map(int, input().split()))

for i in range(N):
    while mydeque and mydeque[-1][0] > now[i]:
        mydeque.pop()
    mydeque.append((now[i],i))
    if mydeque[0][1] <= i - L: # 범위에서 벗어난 인덱스 값은 덱에서 제거한다
        # mydeque[0][1] : 덱의 1번째 데이터의 인덱스 값
        mydeque.popleft()
    print(mydeque[0][0], end=' ')     

profile
가랑비는 맞는다 하지만 폭풍은 내 것이야

0개의 댓글