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

풀이
카드뭉치가 여러개 있고 한 뭉치씩 차례대로 합칠 때 카드의 갯수가 적은 순서로 합치면 된다.
카드 갯수가 적은 뭉치 2개를 하나로 만들고 , 만들어진 하나의 뭉치를 또 비교대상으로 쓰면 된다는 것
예를들어 30 40 50 60 이 있다고 가정하면 30+40 = 70 이 되고 , 70장의 하나의 뭉치를 50장짜리 뭉치랑
합치는 것이아닌 50 60 70 중에 갯수가 적은 순의 2개의 뭉치 즉 , 50 60 을 비교해서 110을 만들어서
70 110 을 합치는 순서가 된다는 것이다.
이렇게 중간과정에서 만들어진 카드뭉치의 갯수를 다 합하면 끝
한번 합쳐질때마다 다시 적은순으로 정렬해야하므로 우선순위큐를 사용
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.util.*;
import java.io.*;
public class Main {
static int N;
static PriorityQueue<Integer> q = new PriorityQueue<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) q.add(Integer.parseInt(br.readLine()));
int sum=0;
while (q.size() > 1 ) {
int a = q.poll();
int b = q.poll();
sum += a + b;
q.add(a+b);
}
System.out.println(sum);
}
}
|
cs |

'알고리즘,PS > 백준' 카테고리의 다른 글
| [BOJ] 백준 [1202] 보석 도둑JAVA (0) | 2021.10.26 |
|---|---|
| [BOJ] 백준 [1744] 수 묶기JAVA (0) | 2021.10.26 |
| [BOJ] 백준 [1339] 단어 수학JAVA (0) | 2021.10.25 |
| [BOJ] 백준 [1041] 주사위 JAVA (0) | 2021.10.24 |
| [BOJ] 백준 [16236] 아기 상어 JAVA (0) | 2021.10.22 |