이번 문제는 새로운 기준으로 우선순위 큐를 만드는 문제였다.
힙에 값이 존재할때 절댓값을 기준으로 가장 작은 값을 뽑는다. 만약 절대값이 같은 수가 있다면 그중 가장 작은 수를 뽑는다.
처음에는 힙이 미리 값을 넣어놓은 상태에서 힙을 어떻게 탐색해야할지 고민을 했다.
그런데 생각해 보니, 애초에 절댓값과 실제 값을 같이 넣어도 되지 않을까 라는 생각을 하게 되었다.
그래서 절댓값과 실제값을 튜플로 넣고 출력하면 되지 않을까 싶었다.
import sys
import heapq
n = int(input())
heap=[]
for _ in range(n):
t = int(sys.stdin.readline())
if t == 0:
if len(heap) == 0:
print(0)
else:
print(heapq.heappop(heap)[1])
else:
heapq.heappush(heap, (abs(t),t))
'알고리즘' 카테고리의 다른 글
백준 11066 풀이 (파일 합치기, DP, Knuth Optimization) (0) | 2021.04.23 |
---|---|
백준 1655 풀이 (가운데를 말해요, 우선순위 큐) (0) | 2021.03.29 |
백준 11279 풀이 (최대 힙, 우선순위 큐, heapq) (0) | 2021.03.29 |
백준 12015 풀이 (가장 긴 증가하는 부분 수열 2, LIS, 이분탐색) (0) | 2021.03.26 |
백준 1300 풀이 (k번째 수, 이분 탐색) (0) | 2021.03.25 |