본문 바로가기

두두의 알고리즘/문제

[정렬] 백준 1715번 '카드 정렬하기' (Python)

728x90

<문제 링크>

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

 

1715번: 카드 정렬하기

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

www.acmicpc.net


<문제 풀이>

1. 항상 가장 작은 크기의 두 카드 묶음을 합치는 알고리즘 계산

2. heapq 사용

3. 결과 값은 두 개 더한 값을 다 더한 값

 

<코드>

#이취코 답
import heapq

n = int(input())

heap = []
for i in range(n):
	data = int(input())
    heapq.heappush(heap, data)
    
result = 0

while len(heap) != 1:
	one = heapq.heappop(heap)
    two = heapq.heappop(heap)
    sum_value = one+two
    result += sum_value
    heapq.heappush(heap,sum_value)
    
print(result)

 

<고쳐야 할 점>

  • heapq 사용하는거 기억하기
  • heappop은 최소값 빼는거 기억하기
  • 이중 덧셈 계산법 기억하기
  • 복습 알고리즘