Algorithm/Python

[백준 1715] 카드 정렬하기

🥭맹2 2021. 3. 26. 01:37
  1. 문제

www.acmicpc.net/problem/1715

 

1715번: 카드 정렬하기

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

www.acmicpc.net

  1. 접근 방법

가장 작은 크기의 두 카드 묶음을 합쳐야한다. 

--> 매 상황에서 가장 작은 크기의 두 카드 묶음 !!

 

--> 우선 순위 큐 사용

 

  1. 코드

python

import sys, heapq
input = sys.stdin.readline
N = int(input())

heap = []
for i in range(N):
    heapq.heappush(heap, int(input()))

ans = 0

while len(heap) != 1:
    one = heapq.heappop(heap)
    two = heapq.heappop(heap)
    sum_val = one + two
    ans += sum_val
    heapq.heappush(heap, sum_val)

print(ans)
  1. 마치며

처음에 문제 풀었는데 4100ms나와서 뭐지 ..... 왜 ... 8ㅅ8 .. 이랬는데

알고보니 입력에서 속도가 느렸던 것 .. 

 

입력만 바꿔도 4초가 줄어욧

 

'Algorithm > Python' 카테고리의 다른 글

[백준 17090] 미로 탈출하기  (0) 2021.04.14
[백준 2110] 공유기 설치  (0) 2021.03.31
[백준 16235] 나무 재테크  (0) 2021.03.16
[백준 2847] 게임을 만든 동준이  (2) 2021.03.05
[조합]  (0) 2021.03.04