https://programmers.co.kr/learn/courses/30/lessons/42627
해당 문제는 Heap으로 분류되어 있으며 파이썬으로 풀면 heapq나 우선순위 큐를 사용하면 될 것 같은데 javascript로는 찾아봐도 그런 구현 되어 있는 것을 찾지 못 해서 어떻게 해야하는지 알 수 없었습니다. 그래서 python으로 푼 다음에 다른 분의 js 풀이를 보고 따라 쳐보고 이해 한 뒤 쓰는 글입니다.
function solution(jobs) {
let total = jobs.length; // 전체 길이를 둡니다.
let answer = 0; // 총 기다린 시간을 저장하는 변수
let now = 0; // 현재 시간
let queue = []; // 작업 진행 예정
while(true) {
let index = 0;
while(true) {
if (index >= jobs.length) break;
if (jobs[index][0] <= now) { // 현재 시간 보다 시작 시간이 작은 값들을 작업 진행 예정 배열에 넣습니다. splice를 하면 배열이 되기 때문에 0번째 인덱스를 넣어줍니다.
queue.push(jobs.splice(index,1)[0]);
}
else { // 아닐 경우 다음 index
index += 1;
}
}
if (queue.length === 0) { // 만약에 queue에도 아무것도 없고
if (jobs.length === 0) { // jobs에도 아무것도 없다면 반복문을 끝낸다.
break; // 끝
}
else { // jobs에는 남아 있을 경우 현재 시간이 1 지났다고 하고 넘어갑니다.
now += 1;
}
}
else { // queue에 있을 경우
let minIndex = 0;
for(let i = 1; i < queue.length; i ++) {
if (queue[minIndex][1] > queue[i][1]]) {
minIndex = i; // queue 중에 소요 시간이 가장 작은 값을 할 것입니다.
}
};
now += queue[minIndex][1]; // 현재 시간이 소요 시간만큼 지났다고 해주고.
answer += now - queue[minIndex][0]; // 현재시간에서 - 요청된 시간을 빼주면 작업의 요청부터 종료까지 걸린시간이 됩니다.
queue.splice(minIndex, 1); // 해당 index를 queue에서 없애줍니다.
}
}
return Math.floor(answer/total); // 전체의 평균.
}
감사합니다 글 잘봤습니다.
if (queue[minIndex[1] > queue[i][1]]) {
이 라인
if (queue[minIndex][1] > queue[i][1]) {
로 고치면 좋을거 같습니다!