Algorithm (PS)

1715 파이썬 카드 정렬하기

minjiwoo 2021. 11. 7. 12:49
728x90

카드 정렬하기 !!

첫 시도:

가능한 순열 조합을 모두 계산하고 최솟값을 찾으려고 했으나 

ㅋㅋㅋ

이 문제는 숨겨진 규칙이 있었으니.. 바로 가장 작은 카드 수 부터 더해가야 한다는 것이다.

그래서 heap 자료 구조를 이용하여 카드 들 중에서 카드 수가 작은 것을 빼내어 더하고, 이 더한값을 다시 heap에 넣어줘서 다시 더해지도록 한다 

 

heapq 라이브러리 오랜만에 쓰는데 이 참에 파이썬 힙 자료구조 라이브러러 쓰는 방법도 확실하게 숙지해야겠따. 

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) # 카드 더미 두개씩 더해 나가야 하니까
    temp_sum = one + two
    result += temp_sum
    heapq.heappush(heap, temp_sum)
print(result)
728x90