문제설명
[ 작업 요청 시점, 작업 시간]
을 담은 2차원 배열 jobs
- 작업의 요청부터 종료까지 걸린 시간들의 평균을 구하여 반환해야 한다.
- 요청이 들어온 순서대로 작업이 진행하면 최소시간을 보장하지 못한다.
제한사항
- 하드디스크가 작업을 수행하지 않을 때에는 먼저 요청이 들어온 작업부터 처리한다.
- 요청 시점은 0 이상 1000 이하
- 작업 시간은 1 이상 1000 이하
문제풀이
function solution(jobs) {
let answer = 0;
let time = 0;
let j = 0;
const priorityJobs = jobs.sort((a, b) => a[0] - b[0]);
const priorityQueue = [];
while (j < priorityJobs.length || priorityQueue.length !== 0)
{
if (priorityJobs.length > j && time >= priorityJobs[j][0]) {
priorityQueue.push(priorityJobs[j++]);
console.log(priorityQueue);
priorityQueue.sort((a, b) => a[1] - b[1]);
continue;
}
if (priorityQueue.length !== 0) {
time += priorityQueue[0][1];
answer += time - priorityQueue[0][0];
priorityQueue.shift();
console.log(priorityQueue);
} else time = priorityJobs[j][0];
}
return Math.floor(answer / priorityJobs.length);
}
+ 다시 풀었을때 나의 코드

체크포인트
- 작업 요청 순서대로 정렬한다.
- 작업 진행 시점
time
보다 요청시점이 작은 작업들을 우선순위 목록에 담는다.
- 우선순위 목록에 담긴 작업들 중 작업시간이 가장 짧은 작업을 뽑아 작업한다.
- 작업 시간만큼 진행 시점이 증가하고 요청시점을 뺀 시간의 합
answer
에 더한다.
(요청시점을 뺀 시간의 합) / 작업의 수
를 결과값으로 반환한다.
- 주의사항 : 작업이 남아있을때
time
보다 요청 시점이 늦을 경우 time
을 요청 시점으로 변경한다.