문제/백준_파이썬

182. 11279(최대 힙) - 파이썬

sm_hope 2022. 8. 21. 15:55
from queue import PriorityQueue
import sys
input = sys.stdin.readline

N = int(input())
que = PriorityQueue(maxsize=N)
result = []

for _ in range(N):
    X = int(input())

    if X == 0:
        if que.empty():
            result.append("0")
        else:
            result.append(str(-que.get()))
    else:
        que.put(-X)


for val in result:
    print(val)

문제요약

값을 입력하는데 0이면 현재 입력된 값 중에 가장 큰 값을 출력하라.(내림차순 필요)

설명

우선순위 큐를 이용한다.

유선순위 큐에 대해서는 다음을 참고하자.

https://smhope.tistory.com/485?category=1056187 

 

[자료구조 || 알고리즘] 우선순위 큐

우선순위 큐 큐(Queue)는 먼저 들어오는 데이터가 먼저 나가는 FIFO(First In First Out) 형식의 자료구조이다. 우선순위 큐(Priority Queue)는 먼저 들어오는 데이터가 아니라, 우선순위가 높은 데이터가 먼

smhope.tistory.com

기본적으로 우선순위 큐는 오름차순으로 진행된다.

하지만 우리는 내림차순이 필요하다 따라서 큐에 값을 집어 넣기 전에, -를 붙여 넣어주자.

 

그러면 비록 - 형태이지만 절대값 기준으로는 내림차순으로 정렬된다.

 

출력을 해줄 때 다시 -를 붙여줌으로써 간단히 해결 가능하다.