문제를 보이는 그대로 풀었다. 추가적으로 쉽게 풀 수 있는 방법을 생각하진 않았다.
function solution(progresses, speeds) {
// 과정 1
let reProgresses = progresses.reverse();
let reSpeeds = speeds.reverse();
let cnt = 0;
let answer = [];
while (true) {
// 과정 2
if (reProgresses[reProgresses.length - 1] < 100) {
reProgresses = reProgresses.map(
(progress, index) => (progress += reSpeeds[index])
);
} else {
while (true) {
// 과정 3
if (reProgresses.length !== 0) {
reProgresses.pop();
cnt++;
if (reProgresses[reProgresses.length - 1] < 100) {
answer.push(cnt);
cnt = 0;
break;
}
} else {
answer.push(cnt);
return answer;
}
}
}
}
}
있는 그대로 푼 내 방법과는 다르게 기준 값 100까지 남은 일수를 배열에 집어넣어 풀었다.
남은 일수만 가지고 문제에 접근하니 신경 쓸 경우가 줄어들고 코드가 훨씬 간단해졌다.
또한, 문제를 보다 논리적으로 접근하였다.
function solution(progresses, speeds) {
let answer = [0];
// 과정 1
let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
let maxDay = days[0];
//과정 2
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;
}