Algorithm/백준 문제풀이

[백준] 13975번 파일 합치기 3 - Java

너지살 2022. 7. 11. 01:38

 

 

 

문제출저

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

 

13975번: 파일 합치기 3

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

www.acmicpc.net

 

 

 

소스코드

package studyGroup.july.july8;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

// 값을 잘 읽고 큰 경우 long 으로 바꿔준다.
// int : 2,147,483,647 (2의 31승 - 1) 10억

/*

kk 의 1,000,000
파일의 크기는 10,000을 초과하지 않는다

100,000,000,000 천억

 */

public class 백준13975파일합치기3 {

    static int k;
    static long cost;
    static long[] answer;


    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int test = Integer.parseInt(br.readLine());

        answer = new long[test];

        for(int t = 0; t < test; t++)
        {
            k = Integer.parseInt(br.readLine());
            StringTokenizer st = new StringTokenizer(br.readLine());
            PriorityQueue<Long> pq = new PriorityQueue<>();
            for (int i = 0; i < k; i++) {
                pq.add(Long.parseLong(st.nextToken()));
            }


            cost = 0L;

            while (pq.size() != 1) {
                long one = pq.poll();
                long two = pq.poll();

                cost += one + two;
                pq.add(one + two);
            }

            answer[t] = cost;

        }

        for (long i : answer) {
            System.out.println(i);
        }
    }
}