토니의 연습장
우선 순위 큐 예제 본문
https://www.acmicpc.net/problem/1417
from queue import PriorityQueue
N = int(input())
P = [0]*N
for i in range(N):
P[i] = int(input())
pq = PriorityQueue() # default : 최솟값을 우선적으로 반환하는 큐
for i in range(1,N): # 기호1번 제외
pq.put(-P[i]) # -를 붙임으로써 음수들로 들어가게끔 처리
if N == 1:
print(0)
else:
count = 0
while True:
max_value = -pq.get() # 음수중 최소값 반환에 앞에 -를 붙임으로써 절대값 기준 최댓값이 반환되게끔 처리
if max_value < P[0]: # 최댓값이 기호1번보다 작은 경우
break
max_value -= 1
P[0] += 1
count += 1
pq.put(-max_value) # 우선순위 큐에 다시 음수로 삽입
print(count)
https://www.acmicpc.net/problem/1715
from queue import PriorityQueue
N = int(input())
pq = PriorityQueue()
for _ in range(N):
num_cards = int(input())
pq.put(num_cards)
answer = 0
while pq.qsize() > 1:
min_value_1 = pq.get() # 가장 작은 값
min_value_2 = pq.get() # 가장 작은 값
pq.put(min_value_1 + min_value_2)
answer += min_value_1 + min_value_2
print(answer)