728x90

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

 

1715번: 카드 정렬하기

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

www.acmicpc.net

 

 

풀이)

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

public class Main_BJ_1715_카드정렬하기 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        for(int i=0; i<n; i++){
            pq.offer(Integer.parseInt(br.readLine()));
        }
        int max = 0;
        while(pq.size()>1){
            int a = pq.poll();
            int b = pq.poll();
            pq.offer(a+b);
            max += a+b;
        }
        System.out.println(max);

    }//main
}

해당 문제는 greedy로 해결할 수 있다.

 

1. 카드를 priority queue에 넣어두고 차례로 뽑는다.(자동으로 오름차순 정렬!)

2. 그 후 priority queue에서 두 개씩 뽑으며 수를 더하고, 다시 priority queue에 넣어둔다.(누적합이기 때문)

3. 이때, 뽑은 두 수를 더한 값을 계속 누적해서 더해줄 변수에 넣어둔다.

4. 이 수를 출력하면 끝!

 

사실 본격적으로 풀기 전에 어쩌다보니 푸는걸 얼핏 들은적이 있어서... 금방 풀었디만...

혼자 아이디어를 생각했을땐 조금 헷갈렸을 것 같기도 하다.

 

다른 골드 문제도 정복해 봐야징!

728x90

'코테 > 백준' 카테고리의 다른 글

백준 10951 A+B - 4(JAVA)  (0) 2023.04.18
백준 2468 안전 영역(JAVA)  (0) 2023.04.12
백준 10844 쉬운 계단 수(JAVA)  (0) 2023.04.06
백준 1946 신입 사원(JAVA)  (0) 2023.04.06
백준 14503 로봇 청소기(JAVA)  (0) 2023.04.04

+ Recent posts