- 생각
1. 어디서 많이 본 문제같다. 백준 1781번 : 컵라면 문제이다.
- 코드
정답 코드 : 배열에 값을 넣은 뒤 마감일로 오른차순 정렬을 한다. 그 후 우선순위 큐를 이용하여 풀었다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[][] array;
public static void main(String[] args) throws Exception {
SetData();
System.out.println(FindMaxValue());
}
private static void SetData() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
N = Integer.parseInt(br.readLine());
array = new int[N][2];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
array[i][0] = Integer.parseInt(st.nextToken());
array[i][1] = Integer.parseInt(st.nextToken());
}
// 2차원 배열 정렬 (deadline 오름차순)
Arrays.sort(array, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
}
});
}
private static int FindMaxValue() {
PriorityQueue<Integer> queue = new PriorityQueue<>();
int sum = 0;
for (int i = 0; i < N; i++) {
queue.add(array[i][1]);
while (!queue.isEmpty() && queue.size() > array[i][0]) queue.poll();
}
while (!queue.isEmpty())
sum += queue.poll();
return sum;
}
}
'algorithm' 카테고리의 다른 글
[JAVA] 백준 2293번 : 동전 1 (0) | 2020.11.18 |
---|---|
[JAVA] 백준 17825번 : 주사위 윷놀이 (0) | 2020.11.18 |
[JAVA] 백준 11660번 : 구간 합 구하기 5 (0) | 2020.11.16 |
[JAVA] 백준 17413번 : 단어 뒤집기 2 (0) | 2020.11.16 |
[JAVA] 백준 3055번 : 탈출 (0) | 2020.11.13 |