문제
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를 공백으로 구분하여 순서대로 출력한다.
정답
import sys
input = sys.stdin.readline
from collections import deque
mydeque = deque()
N, L = map(int,input().split())
lists = list(map(int,input().split()))
for i in range(N):
# 새로운 값이 기존의 값보다 커질때까지 기존의 값(끝부분부터)제거
while mydeque and mydeque[-1][0] > lists[i]:
mydeque.pop() # 잘라내기
mydeque.append((lists[i],i)) # 새로운 값 입력
# 슬라이딩 윈도우가 인덱스 범위에서 벗어난 경우 제거
if mydeque[0][1]<= i-L:
mydeque.popleft()
print(mydeque[0][0],end=" ")
'Coding_Test > Python Code Review' 카테고리의 다른 글
[백준-17298] 오큰수 구하기 (0) | 2023.10.26 |
---|---|
[백준-1874] 스택으로 수열 만들기 (0) | 2023.10.26 |
[백준-12981] DNA비밀번호 (1) | 2023.10.26 |
[백준-1253] '좋은 수' 구하기 (1) | 2023.10.26 |
[핵심요약] 스택과 큐 핵심 이론 (0) | 2023.10.26 |