본문 바로가기
ALGORITHMS/SOLUTION

[백준 : PYTHON] 1715_카드정렬하기

by alasdkfm 2023. 5. 25.

문제링크 :

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

 

1715번: 카드 정렬하기

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

www.acmicpc.net

문제 :

풀이과정

문제풀이 로직

결과적으로 작은 값부터 더해야 최소 값을 만들 수 있으므로, 우선순위 큐를 활용.

최소 값 2개를 꺼낸 뒤, 이들을 더한 값을 다시 리스트에 추가 & 값 누적 하면 된다.

최소 값 두 개를 더한 값을 리스트에 다시 추가했기 때문에, queue의 길이가 1일 때까지 누적 값을 구한다. (누적 값에는 선 반영이 되어있기 때문)

 

내 풀이

import sys
from queue import PriorityQueue
def solution():
    input = sys.stdin.readline
    num = int(input())
    p_queue = PriorityQueue()
    answer = 0
    for i in range(num):
        p_queue.put(int(input()))
    
    while(p_queue.qsize() > 1):
        sum_val = p_queue.get() + p_queue.get()
        answer += sum_val
        p_queue.put(sum_val)
    return answer
    
print(solution())

 

다른 사람 풀이

다른 사람들은 PriorityQueue보다는 heapq를 활용해서 풀었다.

추가적으로 알아보니 파이썬은 heapq의 실행 속도가 더 빠르기 때문에 이를 더 많이 사용하는 듯 했다. ( JAVA- PriorityQueue 사용 )

import sys, heapq as hq

input = sys.stdin.readline
n = int(input())
cost = 0

cards = [int(input()) for _ in range(n)]
hq.heapify(cards)

while len(cards) > 1:
    tmp = hq.heappop(cards) + hq.heappop(cards)
    hq.heappush(cards, tmp)
    cost += tmp

print(cost)