1202. ๋ณด์๋๋ ๊ณผ ์ ์ฌํ ๋ฌธ์ .
๋ฉฐ์น ๋ด์ ๊ณผ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋์ง ๊ธฐํ์ด ์ฃผ์ด์ง์ง ์์ผ๋ฏ๋ก ์ฃผ์ด์ง๋ ๊ณผ์ ๋ค ๊ฐ์ด๋ฐ ์ต๋ ๋ง๊ฐ์ผ์ ๊ธฐํ์ผ๋ก ์ ํ๋ฉด ๋๋ค. ์ด์ฐจํผ ๊ทธ ์ด์์ ๊ธฐํ์ ์ค ๋ดค์ ์ํํ ์ ์๋ ๊ณผ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์.
๋ฌธ์ ์์ ์์๋ 6์ผ์ด ์ต๋์ด๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ์ ๋ํด์ 6์ผ์ ๋ง์ง๋ง ๊ณผ์ ๋ง๊ฐ ๊ธฐํ์ผ์ด๋ผ๊ณ ์ ํ๋ค. ๊ทธ๋ฌ๋ฉด ์ฌ์ค์ 6์ผ ์ฐจ์ ํด๊ฒฐํ ์ ์๋ ๊ณผ์ ๋ (6, 5) ๋ฐ์ ์๋ค. 5์ผ ์ฐจ์๋ ๋ง๊ฐ์ผ์ด 5์ผ ์ด์์ธ ๊ณผ์ ๋ค์ด ์์ผ๋ฏ๋ก(6์ผ ์ฐจ์ ๊ณผ์ ๋ 6์ผ์ฐจ์ ํด๊ฒฐํ ๊ฑฐ๋๊น ์ ์ธ) ๋์ด๊ฐ๋ค. 4์ผ ์ฐจ์๋ 3๊ฐ์ ๊ณผ์ ๊ฐ ์๋๋ฐ ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋๊น ์ต๋ ์ ์๋ฅผ ์ป์ ์ ์๋ ๊ณผ์ ๋ฅผ ํด๊ฒฐํ๋ค. (4, 60) ๊ณผ์ ๊ฐ ํด๊ฒฐ๋๋ค. ๋ค์์ 3์ผ์ฐจ์ธ๋ฐ (3, 30) ๊ณผ์ ๊ฐ ์ถ๊ฐ๋์ง๋ง ๊ณผ์ ๋ง๊ฐ์ผ์ด 3์ผ ์ด์์ธ ๊ณผ์ ๋ค ๊ฐ์ด๋ฐ (4, 40)์ด ์ต๋ ์ ์ ์ด๋ฏ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ๋ค์์ 2์ผ์ฐจ๋ก ๊ณผ์ ๋ง๊ฐ์ผ์ด 2์ผ ์ด์์ธ ๊ณผ์ ๋ค ๊ฐ์ด๋ฐ ์ต๋๊ฐ์ ๊ณ ๋ฅด๋ฉด (2, 50)์ด๋ค.
์ด๋ฐ์์ผ๋ก ๊ณผ์ ๋ง๊ฐ ๊ธฐํ์ผ์์ 1์ผ์ฐจ๋ก ๊ฐ๋ ๊ฑฐ๊พธ๋ก ํ์ดํ๋ ๋ฐฉ์์ผ๋ก ํ์ดํ๋ฉด ๋๋ค. ์ด์ ๋ ๋ง๊ฐ ๊ธฐํ์ผ์ ๋๊ธฐ๋ฉด ์ ์๋ฅผ ์ป์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ค๋ก ๊ฐ์๋ก ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ๋ค์ ์์ ํ๊ณ๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ์ ์ ์์ ์ ํ์ง๊ฐ ์๋ ๊ฒ์์๋ถํฐ ์ต๋๊ฐ์ ๊ตฌํ๊ณ ์ ์ ๋ฒ์๋ฅผ ๋๋ ค๊ฐ์ผ ๊ทธ๋ฆฌ๋ํ๊ฒ ํ ์ ์๋ค.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[][] assignment = new int[N][2];
for (int i = 0; i < N; i++) {
assignment[i][0] = sc.nextInt();
assignment[i][1] = sc.nextInt();
}
Arrays.sort(assignment, (a, b) -> {
if (a[0] != b[0]) return b[0] - a[0];
return b[1] - a[1];
});
int finalDay = assignment[0][0];
int idx = 0;
int maxScore = 0;
PriorityQueue<Integer> queue = new PriorityQueue<>();
while (finalDay > 0 && idx < N) {
while (idx < N && finalDay == assignment[idx][0]) {
queue.add(-assignment[idx][1]);
idx++;
}
System.out.println(queue);
if (!queue.isEmpty()) {
maxScore -= queue.poll();
}
finalDay--;
}
System.out.println(maxScore);
}
}