알고리즘/문제풀이

[Python] 백준 13975 파일 합치기 3

정찡이 2021. 11. 26. 17:10
728x90

1. 문제 링크

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

 

13975번: 파일 합치기 3

프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T개의 테스트 데이터로 이루어져 있는데, T는 입력의 맨 첫 줄에 주어진다.각 테스트 데이터는 두 개의 행으로 주어지는데,

www.acmicpc.net

 

2. 문제 요약

두 개의 파일을 계속 합하여 최종적으로 하나의 파일을 완성하는데 필요한 비용의 총합을 구한다.

 

3. 아이디어 정리

  1. 우선순위 큐 최소힙을 이용하여 가장 작은 2개의 파일을 얻는다.
  2. 두 파일을 합하여 다시 최소 힙에 넣고 파일이 1개가 될 때까지 진행한다.

 

4. 문제 풀이

4-1. 내 풀이

import sys
import heapq

for _ in range(int(sys.stdin.readline())):
    k = int(sys.stdin.readline())
    arr = list(map(int, sys.stdin.readline().split()))
    heapq.heapify(arr)   # 최소힙
    result = 0
    # 가장 작은 2개의 파일 크기를 꺼내서 합친값을 다시 우선순위 큐에 넣기 
    while len(arr) >= 2:
        f = heapq.heappop(arr)
        s = heapq.heappop(arr)
        result += (f + s)
        heapq.heappush(arr, (f + s))
    print(result)

 

5. 결론

  • 우선순위 큐(최소힙) 이용한 문제