[JavaScript] 디스크 컨트롤러

2022. 8. 2. 22:15Algorithm/프로그래머스

level : 3

문제 링크 : 디스크 컨트롤러

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

My Solution

function solution(jobs) {
    /// 들어온 순서대로 나열
    jobs.sort((a,b)=>a[0]-b[0]);
    let answer = 0;
    let temp = [];
    const len = jobs.length;
    /// 시작 시간
    let counter = 0;
    while(jobs.length > 0 || temp.length > 0){
        while(jobs.length > 0 && jobs[0][0]<=counter){
            temp.push(jobs.shift());
        }
        if (temp.length > 0){
            temp.sort((a,b)=>a[1]-b[1]);
            const job = temp.shift();
            answer += ((counter + job[1])-job[0]);
            counter += job[1];
        }
        else{
            counter = jobs[0][0];
        }
    }
    
    return Math.floor(answer/len);
}

풀이방법

jobs를 요청 시간의 오름차순으로 정렬하였다.

작업의 시작 시간을 counter라 정하고 counter보다 작거나 같은 값에 들어온 작업들을 temp라는 Array에 넣는다.

이후 temp안에 있는 작업 중 가장 작업 시간이 가장 적은 값을 가지는 작업을 먼저 수행해야 작업의 요청부터 종료까지 걸린 시간의 평균이 가장 적게 걸린다 판단하여 temp를 정렬 후 가장 작업시간이 적은 값을 기준으로 작업의 요청부터 종료까지 걸린 시간을 answer에 합산하였다.

temp로 들어온 작업을 모두 수행했지만 jobs에 일이 남아 있는 경우 counter를 job의 제일 앞의 시작 시간으로 변경한다.

위 행위는 jobs와 temp에 모든 작업이 끝날 때까지 반복한다.


느낀점
문제를 제대로 읽지 않고 소수점을 안 버려 문제 푸는 데 난항을 겪었다.

문제를 꼼꼼히 읽어야겠다.