-
[Baekjoon Online Judge] 1715번: 카드 정렬하기문제 풀이/Baekjoon Online Judge 2021. 2. 9. 21:18
요구사항
- 정렬된 두 묶음의 숫자 카드가 있다고 한다. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다.
- N개의 숫자 카드 묶음의 각각의 크기가 주어질 때,최소한 몇 번의 비교가 필요한지를 구한다.입력
- 첫째 줄에 N이 주어진다. (1 ≤ N ≤ 100,000) 이어서 N개의 줄에 걸쳐 숫자 카드 묶음의 각각의 크기가 주어진다. 숫자 카드 묶음의 크기는 1,000보다 작거나 같은 양의 정수이다.
출력
- 첫째 줄에 최소 비교 횟수를 출력한다.
우선 순위 큐를 활용하여 숫자 카드를 저장한다. 자동적으로 정렬된 우선 순위 큐를 두 개씩 뽑아가며 더한 후 더한 값을 다시 큐에 저장한다. 만약 큐의 사이즈가 1이면 끝까지 큐를 모두 비운 것이기 때문에 while 반복을 종료하여 마무리한다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.PriorityQueue; public class Baekjoon1715 { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(bufferedReader.readLine()); PriorityQueue<Integer> queue = new PriorityQueue<>(); for (int i = 0; i < n; i++) { int num = Integer.parseInt(bufferedReader.readLine()); queue.add(num); } int sum = 0; while (!queue.isEmpty()) { if (queue.size() == 1) break; int num1 = queue.poll(); int num2 = queue.poll(); queue.add(num1 + num2); sum += num1 + num2; } System.out.println(sum); bufferedReader.close(); } }
'문제 풀이 > Baekjoon Online Judge' 카테고리의 다른 글
[Baekjoon Online Judge] 11727번: 2xn 타일링 2 (0) 2021.02.10 [Baekjoon Online Judge] 2437번: 저울 (0) 2021.02.10 [Baekjoon Online Judge] 4796번: 캠핑 (0) 2021.02.09 [Baekjoon Online Judge] 1373번: 2진수 8진수 (0) 2021.02.08 [Baekjoon Online Judge] 11655번: ROT13 (0) 2021.02.08