토니의 연습장

우선 순위 큐 예제 본문

Algorithm/Ch 3. 응용 자료구조

우선 순위 큐 예제

bellmake 2025. 1. 4. 11:29

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)

 

'Algorithm > Ch 3. 응용 자료구조' 카테고리의 다른 글

해쉬 예제  (1) 2025.01.04
그래프 예제  (1) 2025.01.04
트리 예제  (1) 2025.01.04
누적합 배열 예제  (2) 2024.09.18