코드
import sys
input = sys.stdin.readline
N = int(input())
heap = [0]
def delete():
if len(heap) <= 1:
print(0)
return
root = heap[1]
heap[1], heap[-1] = heap[-1], heap[1]
heap.pop()
idx = 1
while(True):
child = idx * 2
if(child+1 < len(heap) and heap[child] > heap[child+1]):
child += 1
if(child >= len(heap) or heap[child] > heap[idx]): break
heap[idx], heap[child] = heap[child], heap[idx]
idx = child
print(root)
def insert(x):
heap.append(x)
idx = len(heap) - 1
while(idx != 1 and x < heap[idx // 2]):
heap[idx], heap[idx // 2] = heap[idx // 2], heap[idx]
idx = idx // 2
for _ in range(N):
query = input().rstrip()
if query == '0':
delete()
else:
insert(int(query))
결과
풀이 방법
최소 힙
에 대한 개념과 구현방법을 연습하는 문제였다.
- 참고자료: 링크