알고리즘
[백준] 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번 인덱스 값을 이용하면 된다.