๋ฌธ์
ํ์ด
1๏ธโฃ ์ฐ์ ์์ ํ์ ๊ทธ๋ฆฌ๋๋ฅผ ์ด์ฉํ ํ์ด
๐ก ๋ ์ค๋ฅธ Idea
์ปต๋ผ๋ฉด์ ๋ฐ๋๋ผ์ธ์ด ์งง๊ณ ์ปต๋ผ๋ฉด์ ๋ง์ด ์ฃผ๋ ๋ฌธ์ ๋ถํฐ ๊ฒฐ์ ํด์ ํ์ ์ง์ด๋ฃ๋๋ค.
์ฆ, ํ์ ํฌ๊ธฐ = ํ๊ธฐ๋ก ๊ฒฐ์ ํ ๋ฌธ์ ์ = ๋ด๊ฐ ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ ์ฌ์ฉํ ์๊ฐ์ด ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ์ดํ์ ๋์ค๋ ๋ฌธ์ ๋ค์ด ๋ด ํ์ ํฌ๊ธฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด์ ๋ด ํ์ ๋ค์ด์๋ ์ปต๋ผ๋ฉด๋ณด๋ค ๋ง์ด ์ค๋ค๋ฉด
๋ด ํ์ ๋ค์ด์๋ ๊ฐ์ฅ ์ปต๋ผ๋ฉด์ ์ ๊ฒ ์ฃผ๋ ๋ฌธ์ ๋ฅผ ์ ๊ฑฐํ๊ณ , ์ถ๊ฐํด์ค๋ค.
์์ ๋ก ์๋ฆฌ๋ฅผ ์ค๋ช ํด๋ณด๋ฉด,
๋จผ์ , ๋ฐ๋๋ผ์ธ์ด ์งง์ ๊ฒ, ์ปต๋ผ๋ฉด ์๊ฐ ๋ง์ ๊ฒ ์์ผ๋ก ์ ๋ ฌ์ ํ๋ค.
1. ์ฒซ๋ฒ์งธ ์์๋ ๋ฐ๋๋ผ์ธ 1 / ์ปต๋ผ๋ฉด 7์ด๋ค.
ํ์ฌ ํ๋ ๋น์ด์๋ ์ํ๋ก, ์ด ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ถ๊ฐ ํด์ค๋ค.
ํ์ฌ ํ = [ 7 ]
2. ๋๋ฒ์งธ ์์๋ ๋ฐ๋๋ผ์ธ 1 / ์ปต๋ผ๋ฉด 6 ์ด๋ค.
ํ์ฌ ํ๋ ์์๊ฐ 1๊ฐ๋ก ์ด๋ฏธ 1์๊ฐ์ ์ฌ์ฉํ ์ํ์ด๋ค.
๋ฐ๋ผ์ ํด๋น ๋ฌธ์ ๋ฅผ ๋ฐ๋ก ํ์ ์ถ๊ฐํด์ค ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ปต๋ผ๋ฉด ์๋ ํ์ฌ ํ์ ์๋ ์ปต๋ผ๋ฉด ๋ณด๋ค ์ ๊ฒ ์ฃผ๋ ๋ฌธ์ ์ด๋ฏ๋ก ํจ์คํ๋ค.
ํ์ฌ ํ = [ 7 ]
3. ์ธ๋ฒ์งธ ์์๋ ๋ฐ๋๋ผ์ธ 2 / ์ปต๋ผ๋ฉด 5์ด๋ค.
ํ์ฌ ํ์ ํฌ๊ธฐ๋ 1๊ฐ์ด๋ฏ๋ก ํด๋น ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ถ๊ฐํด์ค๋ค.
ํ์ฌ ํ = [7, 5]
4. ๋ค๋ฒ์งธ ์์๋ ๋ฐ๋๋ผ์ธ 2 / ์ปต๋ผ๋ฉด 4์ด๋ค.
์ด๋ฒ ๊ฒฝ์ฐ ์ญ์, ์ด๋ฏธ 2์๊ฐ์ ์ฌ์ฉํ๋ค.
๋ํ, ํ์ ์๋ ์ปต๋ผ๋ฉด ์๊ฐ ๋ชจ๋ 4๋ณด๋ค ํฌ๋ฏ๋ก ํจ์คํ๋ค.
๋ง์ฝ, ํ์ 4๋ณด๋ค ์์ ์์๊ฐ ์์๋ค๋ฉด ๊ฐ์ฅ ์์ ์์๋ฅผ ๋นผ๊ณ 4๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด๋๋ค.
...
์ด๋ฐ์์ผ๋ก ์งํํ๋ฉด ์ ๋ต์ ๋ฐํํ ์ ์๋ค.
import java.io.*;
import java.util.*;
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<int[]> problems = new PriorityQueue<>((a,b)->{
int result = a[0]-b[0];
return result == 0 ? b[1] - a[1] : result;
});
// ๋ฌธ์ ์ ๋ณด ์
๋ ฅ
while (N-- > 0) {
String[] input = br.readLine().split(" ");
int deadLine = Integer.parseInt(input[0]);
int numOfRamen = Integer.parseInt(input[1]);
problems.offer(new int[]{deadLine, numOfRamen});
}
PriorityQueue<Integer> select = new PriorityQueue<>();
// ๋ฌธ์ ๊ฒฐ์
while (!problems.isEmpty()) {
int[] problem = problems.poll();
int deadLine = problem[0];
int numOfRamen = problem[1];
if (select.size() < deadLine) {
select.offer(numOfRamen);
} else {
if (select.peek() < numOfRamen) {
select.poll();
select.offer(numOfRamen);
}
}
}
// ์ปต๋ผ๋ฉด ๊ฐ์ ํฉํ๊ธฐ
long result = 0L;
for (Integer numOfRamen : select) {
result += numOfRamen;
}
System.out.println(result);
}
}
๊ฒฐ๊ณผ
์ด ๋ฌธ์ ์ ๊ฐ์ด, ์ฐ์ ์์ ํ๋ ํน์ ์กฐ๊ฑด์ผ๋ก ์ ๋ ฌ์ด ํ์ํ ๋, ์ ์ฉํ ์๋ฃ๊ตฌ์กฐ์ด๋ฏ๋ก ๊ทธ๋ฆฌ๋ ๋ฌธ์ ์ ํผํฉํด์ ๋์ฌ ์ ์์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ํ ๋, ์ฐ์ ์์ ํ๋ฅผ ํ์ฉํ ์ ์๋์ง ์๊ฐํด๋ณด๊ณ ์ ๊ทผํด์ผ๊ฒ ๋ค.