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