기존 코드
import java.util.*;
class Solution {
public int solution(int[][] jobs) {
PriorityQueue<DiskTask> jobAllQueue = new PriorityQueue<>(new Comparator<DiskTask>() {
@Override
public int compare(DiskTask o1, DiskTask o2) {
if(o1.getStartTime() == o2.getStartTime() ) {
return o1.getLeadTime() - o2.getLeadTime();
} else {
return o1.getStartTime() - o2.getStartTime();
}
}
});
PriorityQueue<DiskTask> jobTimeQueue = new PriorityQueue<>(new Comparator<DiskTask>() {
@Override
public int compare(DiskTask o1, DiskTask o2) {
if(o1.getLeadTime() == o2.getLeadTime() ) {
return o1.getStartTime() - o2.getStartTime();
} else {
return o1.getLeadTime() - o2.getLeadTime();
}
}
});
for (int [] job : jobs){
jobAllQueue.add(new DiskTask(job[0], job[1]));
}
DiskTask currentTask;
int answer = 0;
int endTime = 0;
int taskSuccessCount = 0;
while(true){
if(jobAllQueue.isEmpty()){
break;
} else {
while(!jobAllQueue.isEmpty()){
if(endTime >= jobAllQueue.peek().getStartTime()){
jobTimeQueue.add(jobAllQueue.poll());
} else{
break;
}
}
if(!jobTimeQueue.isEmpty()){
currentTask = jobTimeQueue.poll();
jobAllQueue.addAll(jobTimeQueue);
jobTimeQueue.clear();
answer += (endTime - currentTask.getStartTime() + currentTask.getLeadTime());
endTime += currentTask.getLeadTime();
} else {
currentTask = jobAllQueue.poll();
answer += currentTask.getLeadTime();
endTime += currentTask.getStartTime() - endTime + currentTask.getLeadTime();
}
}
}
return answer/jobs.length;
}
class DiskTask {
int startTime;
int leadTime;
public DiskTask(int startTime, int leadTime){
this.startTime = startTime;
this.leadTime = leadTime;
}
public int getStartTime(){
return this.startTime;
}
public int getLeadTime(){
return this.leadTime;
}
// @Override
// public int compareTo(DiskTask diskTask) {
// if(this.getStartTime() - diskTask.getStartTime() == 0){
// return this.getLeadTime() - diskTask.getLeadTime();
// } else{
// return this.getStartTime() - diskTask.getStartTime();
// }
// }
}
}
최근 코드
import java.util.*;
class Solution {
public int solution(int[][] jobs) {
PriorityQueue <DiskTask> jobsPq = new PriorityQueue<>(
new Comparator<DiskTask>(){
@Override
public int compare(DiskTask d1, DiskTask d2){
return d1.getStartTime() - d2.getStartTime();
}
});
PriorityQueue <DiskTask> comparePq = new PriorityQueue<>(
new Comparator<DiskTask>(){
@Override
public int compare(DiskTask d1, DiskTask d2){
return d1.getLeadTime() - d2.getLeadTime();
}
});
for (int[] job : jobs){
jobsPq.add(new DiskTask(job[0], job[1]));
}
int answer = 0;
int currentTime = 0;
DiskTask currentDiskTask;
while(true){
while (!jobsPq.isEmpty()){
if (currentTime >= jobsPq.peek().getStartTime()){
comparePq.add(jobsPq.poll());
} else {
break;
}
}
if (comparePq.size() > 0){
currentDiskTask = comparePq.poll();
int size = comparePq.size();
for (int i = 0 ; i < size ; i++){
jobsPq.add(comparePq.poll());
}
answer += (currentTime - currentDiskTask.getStartTime() + currentDiskTask.getLeadTime());
currentTime += currentDiskTask.getLeadTime();
} else {
currentTime ++;
}
if (jobsPq.isEmpty()){
break;
}
}
return answer / jobs.length;
}
}
class DiskTask {
int startTime;
int leadTime;
public DiskTask(int startTime, int leadTime){
this.startTime = startTime;
this.leadTime = leadTime;
}
public int getStartTime(){
return startTime;
}
public int getLeadTime(){
return leadTime;
}
}
'프로그래머스 - JAVA' 카테고리의 다른 글
코딩테스트 연습 > 깊이/너비 우선 탐색(DFS/BFS) > 단어 변환 (0) | 2021.06.16 |
---|---|
코딩테스트 연습 > 깊이/너비 우선 탐색(DFS/BFS) > 네트워크 (0) | 2021.06.16 |
코딩테스트 연습 > 깊이/너비 우선 탐색(DFS/BFS) > 타겟 넘버 (0) | 2021.06.14 |
코딩테스트 연습 > 탐욕법(Greedy) > 구명보트 (0) | 2021.06.13 |
코딩테스트 연습 > 탐욕법(Greedy) > 큰 수 만들기 (0) | 2021.06.13 |