rueki

BOJ 1715. 카드 정렬하기 (Priority Queue) 본문

python

BOJ 1715. 카드 정렬하기 (Priority Queue)

륵기 2022. 9. 30. 23:55
728x90
반응형

https://www.acmicpc.net/problem/1715

 

1715번: 카드 정렬하기

정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장

www.acmicpc.net

카드의 개수가 최소인 것끼리 더해나가는 것이 가장 최적의 해를 구할 수 있는 방법이다.

우선순위 큐를 사용하여 차례대로 뽑는 방식을 사용

 

문제의 예시로는 카드가 순서대로 10, 20, 40 이렇게 입력된다.

1. 10 + 20

2. (10 + 20) + 40

import queue

card_queue = queue.PriorityQueue()

n = int(input())

for _ in range(n):
    card_num = int(input())
    card_queue.put(card_num)
    
s = 0

while card_queue.qsize() > 1:
    temp1 = card_queue.get()
    temp2 = card_queue.get()

    card_queue.put(temp1+temp2)
    s += (temp1+temp2)
    
print(s)

Queue에 데이터 넣기 : put

Queue에 데이터 뽑기 : get

Queue size : qsize

Queue 비어있는지 확인 : empty

 

 

 

* 임의로 막 넣었을 때 어떤 값이 가장 먼저 뽑히는지 확인

import queue

card_queue = queue.PriorityQueue()

n = int(input())

for _ in range(n):
    card_num = int(input())
    card_queue.put(card_num)
    
print(card_queue.get())

20, 10, 40 순으로 넣었을 때 10이 제일 먼저 뽑히는 것을 확인할 수 있다.

728x90
반응형

'python' 카테고리의 다른 글

BOJ 1531. 투명 (구현)  (0) 2022.10.02
BOJ 1931. 회의실 배정(Greedy)  (1) 2022.10.01
이미지 경로 전처리 및 레이블링 코드  (0) 2021.06.06
CutMix 실습하기  (0) 2021.05.07
파이썬 UnderScore  (0) 2021.01.07
Comments