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

이서현·2021년 6월 18일
0

Algorithm

목록 보기
40/76

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);
}
profile
안녕하세요. 이서현입니다( ღ'ᴗ'ღ )

0개의 댓글