BAEKJOON (Python)/Greedy Algorithm

BAEKJOON_1715 "카드 정렬하기" PYTHON

RiLLa_0511 2023. 4. 13. 01:59
728x90

[백준] 1715번 Python 파이썬

 

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

 

1715번: 카드 정렬하기

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

www.acmicpc.net

힙(heap) 이란 '부모 노드가 자식보다 작거나 같은 값을 갖는 이진트리'이다. 

 

이번 문제에서 가장 오래 걸린 부분이 heapify() 함수를 사용하지 않아서 발생한 오류를 찾는 것이 오래 걸렸다. 

 

이미 값이 들어있는 리스트를 사용하기 때문에 heapify() 함수로 리스트를 힙으로 변환해주어야 한다. 

import sys, heapq

n = int(sys.stdin.readline())
nums = []

for i in range(n):
    number = int(sys.stdin.readline())
    nums.append(number)
    
result = 0
heapq.heapify(nums)

while len(nums) > 1:
    a = heapq.heappop(nums)
    b = heapq.heappop(nums)
    sum_value = a + b
    result += sum_value
    heapq.heappush(nums, sum_value)

print(result)

혼자 공부하며 올리는 블로그입니다. 틀린 내용은 댓글 남겨주시면 감사하겠습니다.