코딩테스트/파이썬

[백준/11279/파이썬(Pyhon)] 최대 힙 / heapq함수로 최대 힙 구현

JI NY 2023. 2. 26. 00:59

[백준/11279/파이썬(Pyhon)] 최대 힙 / heapq함수

11279번: 최대 힙 (acmicpc.net)

[백준/11279/파이썬(Pyhon)] 최대 힙 / heapq함수


코드

from sys import stdin
import heapq

heap = []
x = 0
N = int(stdin.readline())
for i in range(N):
    x = int(stdin.readline())
    if x > 0:
        heapq.heappush(heap, -x)
    elif x == 0:
        if len(heap) == 0:
            print(0)
        else:
            print(-(heapq.heappop(heap)))
  1. 파이썬에는 heapq라는 라이브러리가 있다. 힙 라이브러리이다. import 해준다.
  2. heap 리스트와 수를 넣거나 0을 입력할 x를 초기화해준다.
  3. N번 반복을 위해 N을 입력받는다.
  4. 반복문으로 , x>0일경우 (자연수일경우) heappush함수를 이용해 힙리스트에 x를 넣어줬다. 이때, -x로 넣어줬다. 
    • 파이썬 heapq함수는 기본이 최소 힙이다. 따라서 -를 대입하면 -5,-4,-3,-2,-1.. 순으로 절댓값시 수가 큰 순서대로 나오기 때문에 , -를 넣어줬다.
  5. x==0일경우 heapq.heapop()함수를 이용해 힙리스트에서 pop해줬다. 힙은 우선순위대로 pop하는데, 최소힙이므로 수가 가장 작은 것부터 pop한다. 그러면 절댓값시 수가 큰 숫자(-5 -> -4 -> -3)순으로 나오게 될 것이다. 그걸 다시 -를 붙여줘서 양수가 나오게 했다. ==> 최대힙 구현

결과