[백준/JAVA] 1715번: 카드 정렬하기
🔺 문제
1715번: 카드 정렬하기
정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장
www.acmicpc.net
🔺 코드
- 틀림
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
for(int i = 0 ; i < N ; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
for(int i = 1 ; i < N ; i++) {
arr[i] += arr[i-1];
}
System.out.println(arr[arr.length - 2] + arr[arr.length - 1]);
}
}
누적합 이용해서 풀 생각을 했었다만...
장렬한(?) 틀림..
- 정답
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
26
27
28
29
30
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
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++) {
int num = Integer.parseInt(br.readLine());
pq.add(num);
}
int data1 = 0;
int data2 = 0;
int sum = 0;
while(pq.size() != 1) {
// 2개 카드 묶음을 큐에서 뽑음
data1 = pq.remove();
data2 = pq.remove();
sum += data1 + data2; // 2개 카드 묶음 합치는데 필요한 비교횟수, 결괏값에 더해 저장
pq.add(data1 + data2);
}
System.out.println(sum);
}
}
|
cs |
✅ 해결 아이디어
✔ 우선순위 큐 (∵ 데이터 삽입,삭제,정렬이 자주 일어나므로)
1. 현재 카드 개수가 가장 작은 묶음 2개 선택해 합침.
2. 합친 카드 묶음을 다시 전체 카드 묶음 속으로 넣기 (이 때, 우선순위 큐는 즉시 자동 정렬!)
3. 카드 묶음이 하나만 남을 때까지 반복
🔺 다른 풀이들
- 우선순위 큐 말고 배열 2개 사용하심
로그인
www.acmicpc.net
- 배열 한 개만 사용하심
로그인
www.acmicpc.net
로그인
www.acmicpc.net
💬 느낀 점
우선순위 큐
- FIFO (우선순위 높은 원소가 먼저 탈출)
- 데이터의 삽입·삭제·정렬 자주 발생 시 사용!
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 6/18 |
(참고)
✔ 우선순위 큐 클래스 사용법
[알고리즘] 우선순위큐(힙)는 왜, 언제 사용해야 할까
언제, 왜 우선순위 큐를 사용해야 하는가? 문제를 풀 때, 원소를 삽입 또는 삭제 후 매번 정렬을 해야하는 문제가 있다. 이럴 때에는 Collections.sort 와 같은 퀵정렬을 이용하게 되면 시간복잡도가 n
creakycogwheel.tistory.com
[Java] PriorityQueue(우선순위 큐) 클래스 사용법 & 예제 총정리
우선순위 큐(Priority Queue)란? 일반적으로 큐는 데이터를 일시적으로 쌓아두기 위한 자료구조로 스택과는 다르게 FIFO(First In First Out)의 구조 즉 먼저 들어온 데이터가 먼저 나가는 구조를 가집니다
coding-factory.tistory.com
✔ Do it 알고리즘 코딩테스트 자바 편 (내돈내산)
Do it! 알고리즘 코딩 테스트 : 자바 편 : 네이버 도서
네이버 도서 상세정보를 제공합니다.
search.shopping.naver.com