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 |