[프로그래머스 / Level3] 디스크 컨트롤러 (Java)
문제 보기
풀이
- 작업을 수행할 때 대기중인 작업들 중에서 가장 짧은 시간이 소요되는 작업을 수행하기 위하여 최소힙 사용(PriorityQueue)
- 다음에 수행될 작업의 인덱스
indexOfJobs
- 직전 작업이 끝난 시간
endTime
- 작업들의 요청 시간부터 완료 시간까지 합
totalTime
- 수행 완료된 작업들의 수
numberOfCompletedJobs
endTime
전에 요청 시간이 시작되는 작업들을 최소힙에 넣음- 최소힙이 비어있는 경우 다음에 수행될 작업의 요청 시간이
endTime
보다 큰 경우 이므로endTime
을 다음에 수행될 작업의 요청시간으로 변경 - 나머지 경우 작업 수행 ->
totalTime
에 요청 시간부터 끝난 시간까지 계산하여 더해주고endTime
을 수행 완료 시간으로 변경 후numberOfCompletedJobs
증가 시킴
class Solution {
public int solution(int[][] jobs) {
int indexOfJobs = 0;
int endTime = 0;
int totalTime = 0;
int numberOfCompletedJobs = 0;
Arrays.sort(jobs, (o1, o2) -> o1[0] - o2[0]);
PriorityQueue<int[]> pq = new PriorityQueue<>((o1, o2) -> o1[1] - o2[1]);
while (numberOfCompletedJobs < jobs.length) {
while (indexOfJobs < jobs.length && jobs[indexOfJobs][0] <= endTime) {
pq.add(jobs[indexOfJobs++]);
}
if (pq.isEmpty()) {
endTime = jobs[indexOfJobs][0];
} else {
int[] job = pq.poll();
totalTime += endTime + job[1] - job[0];
endTime += job[1];
numberOfCompletedJobs++;
}
}
return totalTime / jobs.length;
}
}
Author And Source
이 문제에 관하여([프로그래머스 / Level3] 디스크 컨트롤러 (Java)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pppp0722/프로그래머스-Level3-디스크-컨트롤러-Java저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)