https://programmers.co.kr/learn/courses/30/lessons/42628
import heapq
def solution(operations):
max_heap = []
min_heap = []
for i in operations:
a, b = i.split(" ")
b = int(b)
if a == 'I':
heapq.heappush(max_heap, -b)
heapq.heappush(min_heap, b)
if a == 'D' and b == 1:
if not max_heap or not min_heap:
continue
min_heap.remove(-heapq.heappop(max_heap))
elif a == 'D' and b == -1:
if not max_heap or not min_heap:
continue
max_heap.remove(-heapq.heappop(min_heap))
return [0, 0] if not max_heap else [-max_heap[0], min_heap[0]]
최대힙과 최소힙을 이용하여 풀었다.
파이썬의 heapq는 default가 최소힙이기 때문에,최대힙을 구현하기 위해서 push와 pop을 할 때 - 부호를 붙여주는 방식으로 해결할 수 있다.heapq에 익숙해지는 것도 필요할 것 같다.
'Algorithm | SQL > Programmers' 카테고리의 다른 글
[Programmers | Level 3] 섬 연결하기 (Python) (0) | 2021.05.21 |
---|---|
[Programmers | Level 3] 정수 삼각형 (Python) (0) | 2021.05.19 |
[Programmers | Level 3] 등굣길 (Python) (0) | 2021.05.19 |
[Programmers | Level 3] 단어 변환 (Python) (0) | 2021.05.19 |
[Programmers | Level 3] 네트워크 (Python) (0) | 2021.05.19 |