PS/프로그래머스

[Level2][Javascript] 디스크 컨트롤러

returnzero 2022. 6. 25. 20:54
function solution(jobs) {
    let n= jobs.length;
    var answer = 0;
    jobs.sort(function(a,b){
        return a[0]-b[0]
    });
    
    // console.log(jobs); // [ [ 0, 3 ], [ 1, 9 ], [ 2, 6 ] ]
    let current_time=0;
    let Q=[];
    let index=0;
    while(index<n||Q.length>0){
        
        if (index< n && jobs[index][0]<=current_time){
            Q.push(jobs[index++]);
            continue;
        }
                
        Q.sort(function(a,b){return a[1]-b[1]});
         console.log(Q);
        if( Q.length>0){
        let [start, runtime]= Q.shift();
        console.log(start,runtime,current_time, answer)
        current_time+=runtime;
        answer+= current_time-start
        }
        else{
            current_time=jobs[index][0];
        }
        }
        console.log(answer)
     return Math.floor(answer/n);
}

Greedy알고리즘에 해당하는 문제이다.

Priority Queue가 Javascript에서는 지원되지 않는다는 문제점이 있어서 그리디를 사용해야 한다.