https://school.programmers.co.kr/learn/courses/30/lessons/42586?language=javascript
function solution(progresses, speeds) {
var answer = [];
//완료일까지 남은 날짜수 담은 배열
let goalQueue = progresses.map((prog, idx) => {
return Math.ceil((100 - prog) / speeds[idx], 10);
});
let date = 0; //경과된 시간
while (goalQueue.length > 0) {
let complete = 0;
while (true) {
console.log(goalQueue);
if (goalQueue.length <= 0) {
break;
}
const goal = goalQueue[0];
if (date >= goal) {
complete++;
goalQueue.shift();
} else {
break;
}
}
if (complete > 0) {
answer.push(complete);
}
date += 1;
}
return answer;
}
내 풀이에 비해 가볍고 간단하게 푼 코드가 있어서 가져와 봤다.
function solution(progresses, speeds) {
let answer = [0];
let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
let maxDay = days[0];
for(let i = 0, j = 0; i< days.length; i++){
if(days[i] <= maxDay) {
answer[j] += 1;
} else {
maxDay = days[i];
answer[++j] = 1;
}
}
return answer;
}
내 코드가 date를 하나하나 늘려 가며 반복문을 돌리는 다소 미련한 풀이라면, 다른 사람의 풀이 코드는 date가 목표 days와 일치하거나 뛰어넘는 시점만 반복하도록 하는 효율적인 풀이라고 볼 수 있겠다.