문제링크
디스크 컨트롤러
구현코드
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
class Solution {
public int solution(int[][] jobs) {
Arrays.sort(jobs, new Comparator<int[]>() {
@Override
public int compare(int[] job1, int[] job2) {
return job1[0] - job2[0];
}
});
PriorityQueue<Job> pq = new PriorityQueue<>(new Comparator<Job>() {
@Override
public int compare(Job o1, Job o2) {
return o1.runtime - o2.runtime;
}
});
Queue<Job> wait = new LinkedList<>();
for(int[] job : jobs) {
wait.offer(new Job(job[0], job[1]));
}
int sum = 0;
int cnt = 0;
int end = wait.peek().request;
while(cnt < jobs.length) {
while(!wait.isEmpty() && wait.peek().request <= end) {
pq.offer(wait.poll());
}
if(!pq.isEmpty()) {
Job job = pq.poll();
end += job.runtime;
sum += end - job.request;
cnt++;
}else {
end = wait.peek().request;
}
}
return sum/cnt;
}
}
class Job{
int request;
int runtime;
public Job(int request, int runtime){
this.request = request;
this.runtime = runtime;
}
}