Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 뉴욕현대미술관
- 현대오토에버
- 뉴욕
- 현대오토에버 코딩테스트
- 시티바이크
- 록펠러센터
- 취준
- 컬럼비아대학교
- 코딩테스트
- RGB거리
- 그랜드센트럴터미널
- 에어프레미아
- 미국여행
- 백준
- 슬라이딩 윈도우
- 현대오토에버 1차면접
- 플랫아이언빌딩
- dfs
- 플랫아이언
- 자료구조
- 뉴욕양키스직관
- 다이나믹프로그래밍
- 뉴욕여행
- bfs
- 알고리즘
- 프로그래머스
- 덤보
- 단어변환
- 파이썬
- JWT
Archives
- Today
- Total
기록용
백준 11003 최솟값 찾기 - 파이썬 본문
import sys
from collections import deque
input = sys.stdin.readline
N, L = map(int,input().split())
arr = list(map(int,input().split()))
D = []
q = deque([])
for i in range(N):
# 덱이 비어있지 않고 덱의 맨 뒤가 추가하려는 원소보다 크면 제거 (덱을 오름차순으로 유지하기 위함)
while q and q[-1][0] > arr[i]:
q.pop()
q.append([arr[i], i])
# 덱의 맨 앞 원소의 인덱스가 슬라이딩 윈도우를 벗어났으면 제거
if q[-1][1] - q[0][1] == L:
q.popleft()
D.append(q[0][0]) # 덱의 맨 앞은 항상 슬라이딩 윈도우 내 최솟값
print(*D)
슬라이딩 윈도우 활용 문제
덱의 맨 앞을 원소를 항상 슬라이딩 윈도우 내의 최솟값으로 유지하는 방식이다.
1. while 루프를 통해 추가하려는 원소와 덱의 맨 뒤에 있는 원소를 비교하여 덱 내의 원소가 더 큰 경우 pop해서 제거
2. 덱의 맨 앞과 맨 뒤 원소의 인덱스를 비교하여 슬라이딩 윈도우를 벗어났으면 맨 앞 원소 제거
3. 위의 과정을 통해 덱의 맨 앞 원소를 항상 슬라이딩 윈도우 내 최솟값으로 유지.
'코딩테스트' 카테고리의 다른 글
백준 11286 절댓값 힙 - 파이썬 (0) | 2023.09.14 |
---|---|
백준 5430 AC - 파이썬 (0) | 2023.09.14 |
백준 6198 옥상정원꾸미기 - 파이썬 (0) | 2023.09.14 |
백준 1149 - RGB거리 (Python) (0) | 2023.08.20 |
프로그래머스 - 단어변환 (Python) (0) | 2023.08.11 |