디스크 컨트롤러 (for JAVA)

import java.util.*;

class Solution {
    public int solution(int[][] jobs) {
        int answer = 0;
        int time = 0;
        int idx = 0;
        int requestCnt = 0;
        Arrays.sort(jobs, (o1,o2)->o1[0]-o2[0]);
        PriorityQueue<int[]> pq = new PriorityQueue<>((o1,o2)->o1[1]-o2[1]);
        while(requestCnt < jobs.length) {
            while(idx<jobs.length && jobs[idx][0] <= time) {
                pq.add(jobs[idx++]);
            }
            
            if(pq.isEmpty()) {
                time = jobs[idx][0];
            } else {
                int[] temp = pq.poll();
                answer += temp[1] + time - temp[0];
                time += temp[1];
                requestCnt++;
            }
        }
        return (int) Math.floor(answer/jobs.length);
    }
}

사실 SJF를 더 공부하려고 했는데 너무 게을러 빠지고 시간을 끄는거 같아서 결국 검색찬스를 했다
정렬이나 큐에 넣는 부분의 순서는 어찌해도 좋다 결국 큐에 넣기만 하면 된다
또 이문제는 일단 0부터 시작한다는 개념이 없다 최초에 들어오는 큐의 시간이 100초일수도 있는 것이다. 그래서 큐가 빈 부분의 if절로 첫 큐의 시간으로 맞춰주는 것이고 반복횟수가 정해지지 않았으므로 while문을 사용해서 값에 일치할때 나와줄수 있게 유도하는 것인데 안쪽에 있는 while은 마지막에 큐에 들어간 시간과 큐에 들어온 시간을 비교한다 이때 중복으로 값이 들어올수도 있다 그렇기 때문에 while절로 계속 큐에 넣어서 처리할수 있도록 하는것이다.

좋은 웹페이지 즐겨찾기