Problem solution

최대힙

dev_jun 2022. 7. 25. 14:22

문제 포인트

  • 최소힙을 사용하여 최대힙으로 구현해보자
  • heapq 자료구조는 무조건 최솟값만을 위한 자료구조이기 때문에 이 자료구조를 사용하여 최솟값을 판별하기 위해서는 약간의 트릭이 필요하다.
  • 바로 -로 push하는 것.
    • 3,4 있으면 3이 더 작은 숫자지만 -3, -4가 있으면 -4가 더 작은 숫자가 된다.
    • 이렇게 push하고 마지막에 pop()하는 단계에서 - 붙여서 pop()하주면 그게 가장 큰 값이다.

solution

"""
힙큐 자료구조는 무조건 최소힙을 만들어내기 때문에
최대힙을 사용하기 위해서는 - 값으로 push하여 - 값을 붙인 상태로 출력하면 최댓값 출력 가능.
"""
tmp = []
while True:
    num = int(input())

    if num == -1:
        sys.exit()
    elif num == 0:
        if len(tmp) == 0:
            print(-1)
        else:
            print(-hq.heappop(tmp))
    else:
        hq.heappush(tmp, -num)