본문 바로가기
코딩/백준

알고리즘 - Python / 백준 - 1715번 : 카드 정렬하기

반응형

1715번: 카드 정렬하기 (acmicpc.net)

 

1715번: 카드 정렬하기

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

www.acmicpc.net

 


풀이

  • 정렬된 묶음의 카드들을 합쳐 하나의 묶음으로 만들 때 , 가장 적게 비교하도록 만드는 문제이다.
  • 문제 자체는 직관적이라 가장 작은 것 2개를 합치고 그걸 다시 배열에 넣고 하는 과정을 계속 진행하면 된다.
  • 배열에 넣을 때마다 정렬이 필요하므로 heap을 통해서 위의 알고리즘을 구현하였다.

 

import sys
import heapq
n = int(sys.stdin.readline())
stack = []
for _ in range(n):
    k = int(sys.stdin.readline())
    heapq.heappush(stack, k)
ans = 0
while True:
    if len(stack) == 1:
        break
    a = heapq.heappop(stack)
    b = heapq.heappop(stack)
    ans += (a+b)
    heapq.heappush(stack, a+b)
print(ans)

 

 

 

반응형