알고리즘/백준
[백준] 1715 - 카드 정렬하기
person456
2024. 3. 20. 09:07
난이도 - G4
사용 개념 - 구현, 자료구조(PriorityQueue)
풀이 시간 - 20분 ( 설계 10분, 구현 10분 )
핵심 키워드
* 1. 문제의 설명에 의하면 결국 가장 작은 값 2개를 꺼낸 후 덧셈을 진행하고, 다시 Prioirty Queue에 넣어야 한다.
-> 배열로 진행하면 인덱스 처리가 복잡해진다. Priority Queue를 사용해서 풀라고 만든 문제같다.
* 2. int의 범위로는 할 수 없다. long을 사용하여야 한다. ( 최악의 상황 )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static StringTokenizer st;
static StringBuilder sb;
static int n,m,k;
public static void main(String[] args)throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PriorityQueue<Integer> pq = new PriorityQueue<>();
n = Integer.parseInt(br.readLine());
for(int i=0; i<n; i++){
pq.offer(Integer.parseInt(br.readLine()));
}
long result=0;
while(pq.size()>1){
int sum = pq.poll() + pq.poll();
result += sum;
pq.offer(sum);
}
System.out.println(result);
}
}
|
cs |
- 골드4 난이도 문제치고는 코드가 매우 간결하고 Prioirty Queue를 사용한 것이 끝이다.
- 보통 Queue를 통해 반복을 돌릴 때 while(pq.isEmpty())를 주로 하는데, 이 문제는 1개의 숫자만 남을 때 까지 진행해야 하기 때문에 while(pq.size() > 1)로 반복을 진행했다.