[java] 프로그래머스 - 디스크 컨트롤러

세상을 바꾸는 개발자·2023년 3월 28일
0

[문제링크 - 프로그래머스 - 디스크 컨트롤러] 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;
    }
}
profile
초심 잃지 않기

0개의 댓글