하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다.
예를들어
한 번에 하나의 요청만을 수행할 수 있기 때문에 각각의 작업을 요청받은 순서대로 처리하면 다음과 같이 처리 됩니다.
하지만 A → C → B 순서대로 처리하면
각 작업에 대해 [작업이 요청되는 시점, 작업의 소요시간]을 담은 2차원 배열 jobs가 매개변수로 주어질 때, 작업의 요청부터 종료까지 걸린 시간의 평균을 가장 줄이는 방법으로 처리하면 평균이 얼마가 되는지 return 하도록 solution 함수를 작성해주세요. (단, 소수점 이하의 수는 버립니다)
{{0, 3}, {1, 9}, {2, 6}}
9
문제에 주어진 예와 같습니다.
import java.util.*;
class Solution {
public int solution(int[][] jobs) {
int answer = 0;
Arrays.sort(jobs, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0]; //오름차순
}
});
PriorityQueue<int[]> pq = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[1] - o2[1];
}
});
int sec = 0, pos = 0;
while (pos < jobs.length || !pq.isEmpty()) {
for (int i = pos; i < jobs.length; i++) {
if (jobs[i][0] <= sec) {
pq.offer(jobs[i]);
pos = i + 1;
}
else if (jobs[i][0] > sec)
break;
}
if (pq.isEmpty()) {
sec++;
continue;
}
int[] now = pq.poll();
answer += ((sec - now[0])+ now[1]);
sec += now[1];
}
return answer / jobs.length;
}
}