[Programmers] 이중우선순위큐
🎈문제
https://programmers.co.kr/learn/courses/30/lessons/42628
💬설명
- python heapq를 이용해서 풀었다.
- 최대힙, 최소힙 모두 써줘야 했기 때문에 두 힙의 동기화가 중요했다.
- 최대값 pop할 때 최소힙에서도 삭제해주고, 최소값 pop 할때 최대힙에서도 삭제해주면 된다.
+ 다른 사람 코드도 찾아보니 굳이 두개의 heap을 사용하지 않고 최소힙에서 heapq.nlargest(n, hq) 이렇게 해주면 큰값 순서대로 n개 뽑힌다고 한다. 그럼 heapq.nlargest(1, hq)이렇게 해주면 된다.
👩💻코드
import heapq
max_hq = []
min_hq = []
def solution(operations):
answer = []
for operation in operations:
op, num = operation.split(" ")
if op == "I":
heapq.heappush(max_hq, (-1 * int(num), int(num)))
heapq.heappush(min_hq, int(num))
elif op == "D":
if not max_hq:
continue
if num == "1":
value = heapq.heappop(max_hq)[1]
min_hq.remove(value)
elif num == "-1":
value = heapq.heappop(min_hq)
for i in range(len(max_hq)):
if max_hq[i][1] == value:
del max_hq[i]
break
if max_hq:
return [heapq.heappop(max_hq)[1], heapq.heappop(min_hq)]
else:
return [0, 0]
return answer
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[Programmers] H-Index (0) | 2021.10.13 |
---|---|
[Programmers] K번째수 (0) | 2021.10.12 |
[Programmers] 디스크 컨트롤러 (0) | 2021.10.12 |
[BaekJoon] 백준 4358번 생태학 (0) | 2021.10.12 |
[BaekJoon] 백준 2170 선 긋기 (0) | 2021.10.11 |