문제 링크
import heapq
import sys
maxHeap = []
N = int(sys.stdin.readline())
for _ in range(N):
x = int(sys.stdin.readline())
if x == 0:
if len(maxHeap) == 0: # 만약 배열 길이가 0이라면 0 출력
print(0)
else: # 가장 큰 값 pop
print(heapq.heappop(maxHeap)[1])
else: # 배열에 추가
heapq.heappush(maxHeap, (-x, x)) # heapq는 작은 순으로 정렬되기 때문에 -x로 정렬시킴
시간 초과가 나므로 input() 대신 sys.stdin.readline() 사용
import heapq
heapq.heappush(heap, item) # item을 heap에 추가
heapq.heappop(heap) # heap에서 가장 작은 원소를 pop & 리턴. 비어 있는 경우 IndexError가 호출
heapq.heapify(x) # 리스트 x를 즉각적으로 heap으로 변환함 (in linear time, O(N) )
#최대힙으로 만들기
#힙에 원소를 추가할 때 (-item, item)의 튜플 형태로 넣어주면 튜플의 첫 번째 원소를 우선순위로 힙을 구성하게 된다.
heapq.heappop(max_heap)[1]
import heapq
import sys
maxHeap = []
N = int(sys.stdin.readline())
for _ in range(N):
x = int(sys.stdin.readline())
if x == 0:
if len(maxHeap) == 0: # 만약 배열 길이가 0이라면 0 출력
print(0)
else: # 가장 큰 값 pop
print(heapq.heappop(maxHeap)[1])
else: # 배열에 추가
heapq.heappush(maxHeap, (abs(x), x)) # heapq는 작은 순으로 정렬되기 때문에 abs로 정렬시킴
직접 프린트해가면서 확인해보니 python의 heapq 모듈에서는, tuple을 heap으로 정렬할 때 첫번째 아이템의 크기 순으로 정렬한 뒤 같으면 두번째 아이템의 크기 순으로 정렬한다.