해당 알고리즘 자료는 제가 직접 푼 것도 있지만 다른 분들의 풀이과의 비교를 통해 더 나은 알고리즘을 공부하기 위해 정리한 것들입니다.
https://programmers.co.kr/learn/courses/30/lessons/42627
풀이 : PriorityQueue를 이용하여 소모시간을 구하여 평균을 구한다.
import java.util.*;
class Solution {
public int solution(int[][] jobs) {
Arrays.sort(jobs, new Comparator<int[]>() {
public int compare (int [] a, int [] b) {
return a[0] - b[0];
}
});
PriorityQueue <int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>() {
@Override
public int compare(int[] a, int[] b) {
return a[1] - b[1];
}
});
int time = 0, idx = 0, answer = 0;
while(true) {
while(idx < jobs.length && jobs[idx][0] <= time) { // 시작시간이 제일 빠른 것 중에서 time보다 작거나 같은 요청을 추가
pq.add(jobs[idx++]);
}
if(pq.size() == 0) { // pq가 0이면 다음 요청으로 넘어간다.
time = jobs[idx][0];
continue;
}
int [] job = pq.poll();
time += job[1];
answer += time - job[0];
if(idx == jobs.length && pq.size() == 0) break;
}
answer /= jobs.length;
return answer;
}
}