06.19에 푼 문제입니다🌷
디스크 컨트롤러
priority queue를 이용해서 푸는 문제이다.
duringtime 변수는 총 소요되는 시간이다.
duringtime 이전에 시작하는 작업은 priority queue에 넣는다.
그리고 그 중 작업시간이 제일 작은 것부터 작업을 수행한다.
priority queue와 jobs가 비어있으면 모든 작업이 끝난 것으로 중단한다.
function solution(jobs) {
jobs.sort((a,b)=>a[0]-b[0])
var answer = 0;
let duringtime=jobs[0][0]
let pq=[]
let count=jobs.length
while(jobs.length!==0||pq.length!==0){
while(jobs.length!==0){
if(duringtime<jobs[0][0]) break
pq.push(jobs.shift())
}
if(pq.length===0) pq.push(jobs.shift())
pq.sort((a,b)=>a[1]-b[1])
if(duringtime-pq[0][0]<0) duringtime=pq[0][0]
answer+=(duringtime-pq[0][0])+pq[0][1]
duringtime+=pq[0][1]
pq.shift()
}
return Math.floor(answer/count);
}