알고리즘

[백준] 11279 최대 힙

Dev... 2021. 8. 12. 00:50

https://www.acmicpc.net/problem/11279

 

11279번: 최대 힙

첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가

www.acmicpc.net

최대 힙을 이용하여 값을 넣고 최대 값을 뺄 수 있게 만드는 문제다.

파이썬의 기본 라이브러리인 heapq를 이용하여 풀었다.

 

정답코드

from heapq import heappush, heappop
import sys
li = []

for i in range(int(input())):
  inp = int(sys.stdin.readline())
  if inp != 0:
    heappush(li, (-inp, inp))
  elif inp == 0:
    if len(li) >= 1:
      print(heappop(li)[1])
    else:
      print(0)

8번 라인에서 heappush(li, (-inp, inp))에서 튜플형식으로 (-inp, inp) 값을 넣는다. 그 이유는 heapq 라이브러리는 기본적으로 최소 힙을 사용한다.

 

따라서 (-inp, inp) 를 힙에 넣으면 -inp를 기준으로 최소 힙을 구성하게 되므로 그 상태에서 inp 값을 보면 최대 힙이다. 그 다음 최대 값을 뽑아낼 때는 heappop 한 것의 1번 인덱스 값을 이용하면 된다.