๐ ๏ธ ๋ฌธ์ ๐ ๏ธ
๐๏ธ ์ค๋ช ๐๏ธ
์ด ๋ฌธ์ ์์ ํต์ฌ์ ๋ง๊ฐ๊ธฐํ์ด๋ค.
์ฐ์ ๋น์ฐํ ์ ์๊ฐ ์ต๋๋ก ๋๋ ค๋ฉด ๊ณผ์ ์ ๋ถ์ฌ๋ ์ ์๊ฐ ํฐ ๊ฒ์ ํด์ผํ๋ค.
ํ์ง๋ง ๋ง๊ฐ๊ธฐํ์ด ์ง๋๋ฉด ์๋ฌด๋ฆฌ ๋์๋ ์ธ ์ ์๋ค.
์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์์ ๋ฅผ 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ ฌํด๋ณด์๋ค
- ๋ง๊ฐ๊ธฐํ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ, ๋ง๊ฐ๊ธฐํ์ด ๊ฐ์ผ๋ฉด ์ ์๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
- ๋ง๊ฐ๊ธฐํ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ, ๋ง๊ฐ๊ธฐํ์ด ๊ฐ์ผ๋ฉด ์ ์๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
1. ๋ง๊ฐ๊ธฐํ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ํ 1์ผ๋ถํฐ ํ์ธํ๊ธฐ
- 1์ผ์งธ : 1, 2, 3, 4, 4, 4, 6
- 2์ผ์งธ : 2, 3, 4, 4, 4, 6
- 3์ผ์งธ : 3, 4, 4, 4, 6
- 4์ผ์งธ : 4, 4, 4, 6
- 5์ผ์งธ : 6
- 6์ผ์งธ : 6
์ํํ ์ ์๋ ๊ณผ์ ๋ ๊ณผ์ ๋ฅผ ์ํํ๋ ๋ ์ง์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
1์ผ์งธ์ ์ด๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ์ต๋ ์ ์๊ฐ ๋๋์ง ํ์ธํ๋ ค๋ฉด 6์ผ์งธ๊น์ง ํ์ํด๋ด์ผ์ง๋ง ์ ์ ์๋ค.
์ฆ, ์ป์ ์ ์๋ ์ต๋ ์ ์๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ง์ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํด์ผ ํ๋ค.
2. ๋ง๊ฐ๊ธฐํ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ ํ ๊ฐ์ฅ ๋ง์ง๋ง ๋ ๋ถํฐ ํ์ธํ๊ธฐ
์ด์ ์ ์์์๋ถํฐ ํ์ํ๋ ๊ฒ์ด ์๋๋ผ ๋ค์์๋ถํฐ ํ์ํ์ฌ ๊ฒฝ์ฐ์ ์๋ฅผ ์ค์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์ด ์๋ค.
- 6์ผ์งธ : 6
- 5์ผ์งธ : 6
- 4์ผ์งธ : 4, 4, 4, 6
- 3์ผ์งธ : 3, 4, 4, 4, 6
- 2์ผ์งธ : 2, 3, 4, 4, 4, 6
- 1์ผ์งธ : 1, 2, 3, 4, 4, 4, 6
๋ค์ง๊ธฐ๋ง ํ์ ๋ฟ์ธ๋ฐ ๊ฒฝ์ฐ์ ์๊ฐ ์ค์ด๋ ๊ฒ์ด ๋ณด์ผ ๊ฒ์ด๋ค.
6์ผ์งธ์ ๊ฐ์ฅ ์ ์๋ฅผ ์ต๋๋ก ์ป์ ์ ์๋ ๊ณผ์ ๋ฅผ ์ํํ๊ณ 5์ผ์งธ์๋ ํ ์ ์๋ ๊ณผ์ ๊ฐ ์์ผ๋ ๋์ด๊ฐ๋ค.
4์ผ์งธ์๋ ์ํํ ๊ณผ์ ๋ฅผ ์ ์ธํ๊ณ ์ต๋ ์ ์๋ฅผ ์ป์ ์ ์๋ ๊ณผ์ ๋ฅผ ํ๋ฉด ๋๋ค.
์ฆ, ํ๋ฃจํ๋ฃจ ์ค์ฌ๊ฐ๋ฉฐ ๊ทธ๋๊ทธ๋ ์ต๋ ์ ์๋ฅผ ์ฐพ์๋ด๋ฉด ๋๋ ๊ฒ์ด๋ค.
์ด์ ๋ฌธ์ ๋ ์ด๋ป๊ฒ ์ต๋ ์ ์๋ฅผ ์ฐพ์๋ผ ๊ฒ์ด๋? ์ด๋ค.
๋๋ ๋ ์ ์ค์ฌ๊ฐ๋ฉด์ ํ ์ ์๋ ๊ณผ์ ์ ์ ์๋ค์ ์ต๋ํ์ ๋ฃ์ด ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
๊ทธ๋ฌ๋ฉด ์ธ์ ๋ ์ง ์ต๋๊ฐ์ ๋ฝ์๋ผ ์ ์์ ๊ฒ์ด๋ค.
PriorityQueue<Integer> heap = new PriorityQueue<>();
์์ ์ฝ๋๋ ์๋ฐ์์ ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํ์ฌ ํ์ ์ ์ธํ ๊ฒ์ด๋ค.
์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ํ์ด๊ธฐ ๋๋ฌธ์ ์ต๋ํ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๋ฃ์ด ์ฃผ๋ ๊ฐ์ ์์๋ฅผ ์ทจํ๊ธฐ๋ก ํ๋ค.
int score = 0;
int idx = 0;
for(int day = assignments[0][0]; day > 0; day--) { //์ต๋ ๋ง๊ฐ ๊ธฐํ์ด ๋จผ ๋ ๋ถํฐ
while (idx < assignments.length && assignments[idx][0] >= day) { //๊ฐ๋ฅํ ๊ณผ์ ๋ค์ ์ ์ ๋ฃ๊ธฐ
heap.offer(-assignments[idx][1]);
idx++;
}
if(!heap.isEmpty()) {
score -= heap.poll(); //์์๋ก ์
๋ ฅ๋์๊ธฐ ๋๋ฌธ์ ๋นผ์ค๋ค.
}
}
๊ฐ์ฅ ๋จผ ๋ง๊ฐ ๊ธฐํ๋ถํฐ ํ๋ฃจ์ฉ ์ค์ฌ๊ฐ๋ฉด์ ์ํํ ์ ์๋ ๊ณผ์ ๋ค์ ์ ์๋ฅผ ์ต๋ํ์ ๋ฃ๋๋ค.
ํ์ด ๋น์ด์์ง ์๋ ํ ํ๋ฃจ์ ํ๊ฐ์ ๊ณผ์ ๋ฅผ ์ํํด์ผ ํ๋ฏ๋ก ๊ฐ์ฅ ๋์ ์ ์๋ฅผ ๋นผ์ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ๋ค.
๊ทธ๋์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถํ๋ฉด์ ์๊ณ ๋ ์์์ง๋ง ์๊ฐํ์ง ๋ชปํ ๋๊ฐ ๋ง์๋ค.
์ด๋ฒ์๋ ์ต๋ํ์ ์ด์ฉํ์ฌ ๋ณํ๋ ๋ฆฌ์คํธ์์ ์ต๋๊ฐ์ ๋ฝ์๋ธ๋ค๋ ์๊ฐ์ด ๋๋ฉด์ ๋ฟ๋ฏํ๋ค.
๋ํ ์ ๋ฒ์ ์ ๋ฆฌํ๋ ๋ด์ฉ์ด ๋ฆฌ๋ง์ธ๋๋๋ฉด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ด์ ๋์ฑ ๋ฟ๋ฏํ๋ค.
๐ ํ์ด ๐
package Baekjoon;
import java.io.*;
import java.util.*;
public class Greedy13904 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[][] assignments = new int[n][2];
StringTokenizer st;
for(int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
assignments[i][0] = Integer.parseInt(st.nextToken());
assignments[i][1] = Integer.parseInt(st.nextToken());
}
System.out.println(getMaxScore(assignments));
}
public static int getMaxScore(int[][] assignments) {
//๋ง๊ฐ์ผ์ด ๋จผ ๊ฒ๋ถํฐ, ๊ฐ์ผ๋ฉด ์ ์๊ฐ ๋์ ๊ฒ๋ถํฐ ์ ๋ ฌ
Arrays.sort(assignments, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o2[0] - o1[0] == 0) {
return o2[1] - o1[1];
}
return o2[0] - o1[0];
}
});
PriorityQueue<Integer> heap = new PriorityQueue<>(); //์ต์ํ์ด๋ฏ๋ก ์ ์๋ฅผ ์์๋ก ์
๋ ฅํ๋ค.
int score = 0;
int idx = 0;
for(int day = assignments[0][0]; day > 0; day--) {
while (idx < assignments.length && assignments[idx][0] >= day) {
heap.offer(-assignments[idx][1]);
idx++;
}
if(!heap.isEmpty()) {
score -= heap.poll(); //์์๋ก ์
๋ ฅ๋์๊ธฐ ๋๋ฌธ์ ๋นผ์ค๋ค.
}
}
return score;
}
}
'ProgramSolve > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 5397๋ฒ - ํค๋ก๊ฑฐ (Java) (2) | 2024.01.28 |
---|---|
[BOJ] 2512๋ฒ - ์์ฐ (Java) (0) | 2024.01.15 |
[BOJ] 31066๋ฒ - ๋น ์ค๋ ๋ (Java) (2) | 2024.01.02 |
[BOJ] 12919๋ฒ - A์ B 2 (Java) (0) | 2023.12.24 |
[BOJ] 10942๋ฒ - ํฐ๋ฆฐ๋๋กฌ? (Java) (0) | 2023.12.22 |