[프로그래머스] 이중 우선순위 큐
2022. 2. 18. 01:06ㆍPython/코딩 문제
# 문제 설명
이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말한다.
명령어 | 기능 |
I 숫자 | 큐에 주어진 숫자를 삽입 |
D 1 | 큐에서 최대값 삭제 |
D -1 | 큐에서 최소값 삭제 |
이중 우선순위 큐가 연산할 명령들이 주어질 때, 모든 연산을 처리한 후 [최대값, 최소값]을 반환해라.
최대값, 최소값을 삭제하는 연산에서 해당하는 값이 2개 이상인 경우, 하나만 삭제한다.
빈 큐에 데이터를 삭제하는 연산이 주어질 경우, 해당 연산은 무시한다.
단, 처리한 후 큐가 비어있다면 -1을 반환한다.
# 입출력 예시
입력 | 출력 |
["I 16", "D 1"] | [0, 0] |
["I 7", "I 5", "I -5", "D -1"] | [7, 5] |
# 코드 풀이
from heapq import heappush, heappop, nlargest, nsmallest
def solution(operations):
answer = []
q = []
for row in operations:
op, x = row.split(' ')
if op == 'I':
heappush(q, int(x))
elif not q: # D 연산인데 empty q라면
continue
elif x == '-1':
heappop(q)
else:
q.pop()
if not q:
return [0, 0]
return [*nlargest(1, q), *nsmallest(1, q)]
# 핵심 포인트
- q에서 가장 큰 n개의 값을 반환하기 위해 heapq.nlargest(n, q)를, 가장 작은 값을 위해서는 heapq.nsmallest(n, q)를 사용한다.
반응형
'Python > 코딩 문제' 카테고리의 다른 글
[리트코드] 22. Generate Parentheses (0) | 2022.02.23 |
---|---|
[리트코드] 208. Implement Trie (Prefix Tree) (0) | 2022.02.21 |
[프로그래머스] 디스크 컨트롤러 (0) | 2022.02.18 |
[프로그래머스] 더 맵게 (0) | 2022.02.17 |
[리트코드] 743. Network Delay Time (0) | 2022.02.14 |