기록하는 개발자

[프로그래머스][코딩테스트 고득점 Kit][Javascript] 디스크 컨트롤러 본문

Algorithm

[프로그래머스][코딩테스트 고득점 Kit][Javascript] 디스크 컨트롤러

밍맹030 2023. 8. 13. 23:43
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/42627?language=javascript 

 

프로그래머스

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

programmers.co.kr

전체 코드

function solution(jobs) {
    let answer = 0, index = 0, time = 0;
    let queue = [];
    
    // 오름차순 정렬
    jobs.sort((a,b)=>a[0]-b[0]);
    
    while(index<jobs.length || queue.length!=0){
        // 현재 시간보다 작업 요청 시간이 빠르면 queue에 삽입
        if(index < len && jobs[index][0] <= time){
            queue.push(jobs[index++]);
            // 배열의 두 번째 요소([i][1])를 기준으로 오름차순 정렬
            queue.sort((a,b)=>a[1]-b[1]);
            continue;
        }
        // queue의 길이가 0인 경우의 예시
        // [[0, 5], [1, 10],[20, 3]] 의 경우
        // 이전 두 태스크의 실행이 끝나고 5초 뒤에 세 번째 작업이 요청된다
        if (queue.length == 0){
            time = jobs[index][0];
        }
        
        // queue의 길이가 0보다 큰 경우
        // 전체 작업의 요청부터 종료까지 걸린 시간 
        // = 이전까지의 작업 요청부터 종료까지 걸린 시간 + 현재 작업 시작 시간 + 작업 소요 시간 - 작업 요청 시간
        else if(queue.length > 0){
            let job = queue.shift();
            answer+= time - job[0] + job[1];
            time+=job[1];
        }
    }
    // 각 작업의 요청부터 종료까지 걸린 시간의 평균
    // 소수점 자리 버림
    return Math.floor(answer/jobs.length);
}
728x90