반응형
- 알고리즘 분류 : 구현, 그리디
- 사용 언어 : JAVA
- 문제 요점
- 우선순위 큐 이용
- 우선순위 정렬 기준 : 급여 내림차순, 날짜 내림차순
소스 설명은 주석을 참고해주세요.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static class Task implements Comparable<Task> {
int pay;
int date;
public Task(int pay, int date) {
this.pay = pay;
this.date = date;
}
@Override
public int compareTo(Task o) {
if(this.pay != o.pay){
return o.pay - this.pay;
}
else{
return o.date - this.date;
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
PriorityQueue<Task> pq = new PriorityQueue<>();
int maxDate = 0;
// 급여 > 남은일자
for(int i=0; i<N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int pay = Integer.parseInt(st.nextToken());
int date = Integer.parseInt(st.nextToken());
maxDate = Math.max(maxDate, date);
pq.offer(new Task(pay, date));
}
boolean[] dateArr = new boolean[maxDate+1];
int totalPay = 0;
while(!pq.isEmpty()){
Task task = pq.poll();
int pay = task.pay;
int date = task.date;
for(int i=date; i>0; i--) {
if (!dateArr[i]) {
dateArr[i] = true;
totalPay += pay;
break;
}
}
}
System.out.println(totalPay);
}
}
반응형
'Algorithm' 카테고리의 다른 글
[BAEKJOON] 14284번 : 간선 이어가기 2 (JAVA) (0) | 2024.01.07 |
---|---|
[Programmers] 택배 배달과 수거하기 (Java) (0) | 2023.09.17 |
[BAEKJOON] 1339번 : 단어 수학 (JAVA) (0) | 2023.08.13 |
[BAEKJOON] 13904번 : 과제 (JAVA) (0) | 2023.07.02 |
[BAEKJOON] 2212번 : 센서 (JAVA) (0) | 2023.06.25 |