1. 문제

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

 

1715번: 카드 정렬하기

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

www.acmicpc.net

2. 접근방법

현재 가지고 있는 카드뭉치 중 가장 작은 것 2개를 뽑아 새 뭉치를 만들면 최소의 비교로 가능하다.

 

여기서 현재 가지고 있는 카드뭉치는 새롭게 합쳐져 만들어진 뭉치까지 포함해서 작은 것 2개이다.

 

1. pq에 모든 카드 갯수 넣기

2. 작은 것 2개를 뽑아 비교횟수를 answer에 저장하고

3. 새로 만들어진 뭉치를 pq에 다시 넣기

4. 뭉치가 하나만 남을 때까지 돌고 answer 출력

 

3. 자바 코드

package Gold;

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

public class G4_1715카드정렬하기 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
		int N = Integer.parseInt(br.readLine());

		for (int i = 0; i < N; i++)
			pq.add(Integer.parseInt(br.readLine()));
		int answer = 0;
		while (pq.size() != 1) {
			int cnt = pq.poll() + pq.poll();
			pq.add(cnt);
			answer += cnt;
		}
		System.out.println(answer);
	}

}

4. 마치며

많이 겪어본 유형이라 어렵지 않게 해결 가능했다.

 

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준] 14567 선수과목 (Prerequisite)  (0) 2021.12.08
[백준] 2624 동전 바꿔주기  (2) 2021.11.30
[백준] 2631 줄세우기  (0) 2021.11.25
[백준] 5557 1학년  (0) 2021.11.23
[백준] 1726 로봇  (0) 2021.11.20

+ Recent posts