코딩딩/BOJ

1715 - 카드 정렬하기

전낙타 2024. 4. 24. 10:00

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

 

정답코드!

import sys
import heapq
input = sys.stdin.readline

n = int(input())

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

res = []
while len(queue) >= 2:
    tmp1 = heapq.heappop(queue)
    tmp2 = heapq.heappop(queue)
    res.append(tmp1+tmp2)
    heapq.heappush(queue, tmp1+tmp2)

print(sum(res))

 

처음 문제에 접근한 방법은 정렬된 단순 queue를 사용해서 문제에 접근했다.

하지만 queue로 문제에 접근하면 한번 연산을 시행해줄때마다 계속해서 sort를 해줘야 했고 이 방법은 너무 비효율적이라 판단되어 폐기.

 

최종적으로 삽입과 삭제가 일어날때마다 최소값이 갱신되는 최소힙으로 문제에 접근했다.