์ธ๊ณ์ ์ธ ๋๋ ์๋์ด๋ ๋ณด์์ ์ ํธ๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค.
์๋์ด๊ฐ ํธ ๋ณด์์ ์๋ ๋ณด์์ด ์ด N๊ฐ ์๋ค. ๊ฐ ๋ณด์์ ๋ฌด๊ฒ Mi์ ๊ฐ๊ฒฉ Vi๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์๋์ด๋ ๊ฐ๋ฐฉ์ K๊ฐ ๊ฐ์ง๊ณ ์๊ณ , ๊ฐ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ์ต๋ ๋ฌด๊ฒ๋ Ci์ด๋ค. ๊ฐ๋ฐฉ์๋ ์ต๋ ํ ๊ฐ์ ๋ณด์๋ง ๋ฃ์ ์ ์๋ค.
์๋์ด๊ฐ ํ์น ์ ์๋ ๋ณด์์ ์ต๋ ๊ฐ๊ฒฉ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N๊ณผ K๊ฐ ์ฃผ์ด์ง๋ค. (1 โค N, K โค 300,000)
๋ค์ N๊ฐ ์ค์๋ ๊ฐ ๋ณด์์ ์ ๋ณด Mi์ Vi๊ฐ ์ฃผ์ด์ง๋ค. (0 โค Mi, Vi โค 1,000,000)
๋ค์ K๊ฐ ์ค์๋ ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ์ต๋ ๋ฌด๊ฒ Ci๊ฐ ์ฃผ์ด์ง๋ค. (1 โค Ci โค 100,000,000)
๋ชจ๋ ์ซ์๋ ์์ ์ ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์๋์ด๊ฐ ํ์น ์ ์๋ ๋ณด์ ๊ฐ๊ฒฉ์ ํฉ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
๐ก ๋ฌด๊ฒ๊ฐ์ผ๋ก ์ค๋ฆ์ฐจ์ํ ํ, ๋ฌด๊ฒ๊ฐ ๊ฐ๋ค๋ฉด value๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ํจ
๐ก ๊ฐ๋ฐฉ์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํจ
๐ก ๊ฐ๋ฐฉ๋ณด๋ค ์์ ๋ฌด๊ฒ๋ฅผ ๊ฐ์ง ๋ณด์๋ค์ ๋ชจ๋ ์ฐ์ ์์ ํ์ ๋ฃ์
๐ก ๊ฐ๋ฐฉ ํ๋์ ํ ๊ฐ ๋ณด์์ด ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ์ฐ์ ์์ ํ์ ๋ฃ์ ๊ฒ ์ค์ ๊ฐ๋ฐฉ ๊ฐ์๋งํผ ๋ณด์์ ๊บผ๋ด์ ๋ํจ
Arrays.sort(jewelry, new Comparator<int[]>() {
@Override
public int compare(int o1[], int o2[]) {
if(o1[0] == o2[0]) return o2[1] - o1[1];
return o1[0] - o2[0];
}
});
Arrays.sort(backpack);
for(int i=0; i<k; i++) {
while(idx < n && jewelry[idx][0] <= backpack[i]) {
pq.add((-1)*jewelry[idx][1]);
idx++;
}
...
}
for(int i=0; i<k; i++) {
...
if(!pq.isEmpty()) {
cnt += Math.abs(pq.poll());
}
}
import java.io.BufferedReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.io.InputStreamReader;
public class BOJ_1202 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] s = br.readLine().split(" ");
int n = Integer.parseInt(s[0]);
int k = Integer.parseInt(s[1]);
int[][] jewelry = new int[n][2];
int[] backpack = new int[k];
for(int i=0; i<n; i++) {
s = br.readLine().split(" ");
jewelry[i][0] = Integer.parseInt(s[0]);
jewelry[i][1] = Integer.parseInt(s[1]);
}
for(int i=0; i<k; i++) {
backpack[i] = Integer.parseInt(br.readLine().trim());
}
Arrays.sort(jewelry, new Comparator<int[]>() {
@Override
public int compare(int o1[], int o2[]) {
if(o1[0] == o2[0]) return o2[1] - o1[1];
return o1[0] - o2[0];
}
});
Arrays.sort(backpack);
PriorityQueue<Integer> pq = new PriorityQueue<>();
long cnt = 0;
int idx = 0;
for(int i=0; i<k; i++) {
while(idx < n && jewelry[idx][0] <= backpack[i]) {
pq.add((-1)*jewelry[idx][1]);
idx++;
}
if(!pq.isEmpty()) {
cnt += Math.abs(pq.poll());
}
}
System.out.println(cnt);
}
}
์ฑ๊ณตโจ