[JavaScript] 디스크 컨트롤러
2022. 8. 2. 22:15ㆍAlgorithm/프로그래머스
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에 모든 작업이 끝날 때까지 반복한다.
느낀점
문제를 제대로 읽지 않고 소수점을 안 버려 문제 푸는 데 난항을 겪었다.
문제를 꼼꼼히 읽어야겠다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[JavaScript] 수식 최대화 (0) | 2022.08.16 |
---|---|
[JavaScript] 거리두기 확인하기 (0) | 2022.08.15 |
[JavaScript] [1차] 비밀지도 (0) | 2022.08.02 |
[JavaScript] 가장 먼 노드 (0) | 2022.08.01 |
[JavaScript] [1차] 뉴스 클러스터링 (0) | 2022.08.01 |