문제
문제 풀이
문제에서 작업해야하는 작업리스트에서 입력된 작업중 작업 시간이 더 작을 것을 수행 했을 때에 걸리는 시간을 물어 보는 문제이다. 문제 해석에 어려움이 있었으나 시간을 들여 차근차근 하나씩 읽어보니 하나씩 보였다.
그리고 작업 우선순위에 따라 시간별 입력되는 작업리스트가 달라지고 있으며, 해당 부분도 감안을 하고 지나간 시간이 얼마나 되는지도 확인을 하면서 입력을 할 수 있도록 해야한다.
해당 문제에서는 직접 힙을 만드는 것이 아니라 Comparator 클래스를 활용한 PrioirityQueue(우선순위 큐) 클래스를 활용하였다.
입력되는 잡리스트를 먼저 우선순위에 따라 내림차순 정렬을 하고 이후 시간대 별로 입력된 작업들 경우에 우선순위 큐를 활용해서 작업 시간이 더 짧은 일이 우선적으로 수행하게 하였다.
해당 작업이 걸리는 시간은 작업시간 + 앞에서 대기한 시간 - 우선순위 값 으로 계산을 하였다.
나의 답안
static int solution(int[][] jobs) {
int answer = 0;
int count = 0;
int now = 0;
Arrays.sort(jobs, ((o1, o2) -> o1[0] - o2[0]));
PriorityQueue<int[]> queue = new PriorityQueue<>(((o1, o2) -> o1[1] - o2[1]));
int index = 0;
while (count < jobs.length) {
while (index < jobs.length && jobs[index][0] <= now) {
queue.add(jobs[index++]);
}
if (queue.isEmpty()) {
now = jobs[index][0];
} else {
int[] tmp = queue.poll();
answer += tmp[1] + now - tmp[0];
now += tmp[1];
count++;
}
}
return answer / jobs.length;
}