반응형
- 알고리즘 분류 : 구현, 그리디
- 사용 언어 : 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 Homework implements Comparable<Homework>{
int dueDate;
int score;
public Homework(int dueDate, int score) {
this.dueDate = dueDate;
this.score = score;
}
// 정렬 기준 : 점수 내림차순, 마감일 오름차순
@Override
public int compareTo(Homework other) {
if(this.score != other.score)
return other.score - this.score;
else {
return this.dueDate - other.dueDate;
}
}
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
PriorityQueue<Homework> pq = new PriorityQueue<>();
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int dueDate = Integer.parseInt(st.nextToken());
int score = Integer.parseInt(st.nextToken());
pq.offer(new Homework(dueDate, score));
}
// isAssigned[int] 가 true라면, 그 날 과제를 한 것임
boolean[] isAssigned = new boolean[1001]; // 최대 1000일이라고 문제에 명시
int totalScore = 0;
while(!pq.isEmpty()) {
Homework homework = pq.poll();
int score = homework.score;
int dueDate = homework.dueDate;
for(int i=dueDate; i>0; i--) {
if(isAssigned[i] == false) {
isAssigned[i] = true;
totalScore += score;
break;
}
}
}
System.out.println(totalScore);
}
}
반응형
'Algorithm' 카테고리의 다른 글
[BAEKJOON] 2109번 : 순회강연 (JAVA) (0) | 2023.08.19 |
---|---|
[BAEKJOON] 1339번 : 단어 수학 (JAVA) (0) | 2023.08.13 |
[BAEKJOON] 2212번 : 센서 (JAVA) (0) | 2023.06.25 |
[BAEKJOON] 1092번 : 배 (JAVA) (1) | 2023.06.11 |
[BAEKJOON] 7562번 : 나이트의 이동 (JAVA) (0) | 2023.05.10 |