디스크 컨트롤러 (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절로 계속 큐에 넣어서 처리할수 있도록 하는것이다.
Author And Source
이 문제에 관하여(디스크 컨트롤러 (for JAVA)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ksy9107/디스크-컨트롤러-for-JAVA-m661xma4저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)