[JavaScript][Programmers] 디스크 컨트롤러

조준형·2021년 7월 12일
0

Algorithm

목록 보기
25/142
post-thumbnail

🔎 디스크 컨트롤러

❓ 문제링크

https://programmers.co.kr/learn/courses/30/lessons/42627

📄 제출 코드

function solution(jobs) {
    // 먼저 오는 순서대로 정렬.
    jobs.sort((a,b)=>a[0] - b[0]);
    console.log(jobs);

    let pq = []; // 시작가능한 일들이 들어가며 작업시간 오름차순 정렬
    let i = 0, time = 0;
    let answer = 0;
    
    while (i < jobs.length || pq.length != 0) { // 우선순위큐가 빌때까지 
        console.log(`jobslen : ${jobs.length}, pqlen : ${pq.length}, i:${i}`);
        // 우선순위큐 넣기.
        if (i < jobs.length && jobs[i][0] <= time) {
            console.log(`jobs[i][0] : ${jobs[i][0]}, time : ${time}`)
            console.log(`before pq : ${pq}`)
            pq.push(jobs[i]);
            i++;
            console.log(`after : ${pq}`)
            pq.sort((a, b) => a[1] - b[1]);
            console.log(`sort : ${pq}`)
            console.log();
            continue;
        }
        // 도착한 작업이 없을 때
        if (pq.length == 0) {
            console.log(pq)
            time = jobs[i][0];
            console.log(`time : ${time}`);
        } else {
            
            const [start, work] = pq.shift();
            console.log(`start : ${start}, work : ${work}`);
            answer += time + work - start;
            time += work;
            console.log(`answer : ${answer}, time : ${time}`)
            console.log();
        }
    }

    
    return parseInt(answer/jobs.length);
}

let jobs = [[0, 3], [1, 9], [2, 6], ]
console.log(solution(jobs));

우선 못 풀었다.
정렬을 해서 모든 조합의 수를 다 생각해야하나?라고 생각하면서 했지만, 실패했다.
그래서 다른 사람의 코드를 보고 console로 찍어보면서 이해했다.

우선 먼저 들어오는 순서로 정렬을한다.
그 다음 i가 jobs길이가 커지고, pq가 빌 때까지 반복한다.
우선 첫번째 [0,3]이 들어 올 때 첫 번째 if문에 들어가서 pq에 push된다.
pq = 0,3

그 다음 i는 1이 되고, jobs[i][0] <= time 때문에 아래쪽 if-else로 가게된다.
pq가 0이 아니므로 else문에 들어가고, start = 0, work = 3
answer는 여태 걸린 시간(time) + 일이 걸리는시간(work) - 시작시간(start).
time은 work를 더 해준다.

다음 pq는 비게되고, i=1이다.
그 다음 [1,9]가 위처럼 pq에 들어가게 되고, 이 때 time=3이기 때문에 그 뒤의 [2,6]도 pq에 들어가고, 답이 도출되게 된다.

console창

[ [ 0, 3 ], [ 1, 9 ], [ 2, 6 ] ]
jobslen : 3, pqlen : 0, i:0
jobs[i][0] : 0, time : 0
before pq : 
after : 0,3
sort : 0,3

jobslen : 3, pqlen : 1, i:1
start : 0, work : 3
answer : 3, time : 3

jobslen : 3, pqlen : 0, i:1
jobs[i][0] : 1, time : 3
before pq : 
after : 1,9
sort : 1,9

jobslen : 3, pqlen : 1, i:2
jobs[i][0] : 2, time : 3
before pq : 1,9
after : 1,9,2,6
sort : 2,6,1,9

jobslen : 3, pqlen : 2, i:3
start : 2, work : 6
answer : 10, time : 9

jobslen : 3, pqlen : 1, i:3
start : 1, work : 9
answer : 27, time : 18

9
profile
깃허브 : github.com/JuneHyung

0개의 댓글