[문제링크 - 프로그래머스 - 디스크 컨트롤러] https://school.programmers.co.kr/learn/courses/30/lessons/42627
import java.util.Arrays;
import java.util.PriorityQueue;
class Solution {
public int solution(int[][] jobs) {
int answer = 0;
int end = 0; // 수행되고난 직후의 시간
int index = 0; // jobs 배열의 인덱스
int count = 0; // 수행된 요청 갯수
// 요청시간에 대해 오름차순 정렬
Arrays.sort(jobs, (o1, o2) -> o1[0] - o2[0]);
// 처리 시간에 대해 오름차순 정렬
PriorityQueue<int[]> pq = new PriorityQueue<>((o1, o2) -> o1[1] - o2[1]);
while (count < jobs.length) {
//end 시간까지 들어온 요청이 있으면 pq에 넣음
while (index < jobs.length && jobs[index][0] <= end) {
pq.add(jobs[index++]);
}
if (pq.isEmpty()) { //pq가 없다면 다음 인덱스에 대한 요청 시간으로 맞춰줌
end = jobs[index][0];
} else {
int[] temp = pq.poll();
answer += temp[1] + end - temp[0]; //처리 시간 + 처리 시작 시간 - 요청한 시간
end += temp[1];
count++;
}
}
return answer / jobs.length;
}
}