프로그래머스
progresses의 길이만큼만 반복문을 돌면 되므로, 모든 테스트가 0.1초 미만으로 빠르게 통과했다.
function solution(progresses, speeds) {
let deployday = Math.ceil((100-progresses[0])/speeds[0]);
let features = 1;
const res = [];
for(let i=1; i<progresses.length; i++){
const days = Math.ceil((100-progresses[i])/speeds[i]);
if(deploydays>=days) features++;
else{
res.push(features);
deployday = days;
features = 1;
}
}
res.push(features);
return res;
}
이 풀이를 통해 반복문 안에서 하나의 변수만 사용했는데, 2개 이상의 변수를 선언하는 것과 ++
를 쓰는 위치에 따라 다르게 기능하는 것을 배웠다.
그런데, 속도의 측면에서는 map과 반복문을 사용해서 평균 5초 정도의 시간이 걸렸다. 이 풀이에서는 각 기능이 완성되기까지 걸리는 일수를 days 배열에 저장했는데, 이 과정은 시간을 오래걸리게 만들어서 생략하는 것이 속도를 향상시킬 수 있을 것 같다.
answer[++j] = 1;
은 answer의 j+1번째 인덱스가 된다는 것을 의미하고, 만약 answer[j++] = 1
과 같이 작성하면, 우선 answer의 j번째 인덱스가 1이고, j++된다. function solution(processes, speeds) {
let answer = [0];
let days = processes.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;
}