728x90
문제
TRY
function solution(progresses, speeds) {
// 진행중인 작업이 0이 아닐 동안
while (progresses.length) {
// 첫번 째 개발이 끝나기 까지 필요한 날짜
const needDay = Math.ceil((100 - progresses[0]) / speeds[0]);
// 필요한 날짜 * 개발 속도 만큼 일을 진행시킴
const proceed = progresses.map(
(progress, index) => progress + needDay * speeds[index],
);
// 개발 완료 된 작업 수 초기화
let finished = 0;
for (let i = 0; i < proceed.length; i++) {
// 만약 진행률이 100% 이상이면 진행중인 작업과 속도를 없애줌
if (proceed[i] >= 100) {
progresses.shift();
speeds.shift();
finished++;
} else {
// 100% 미만인 작업이 있으면 멈춤
break;
}
}
answer.push(finished);
}
return answer;
}
console.log(solution([93, 30, 55], [1, 30, 5]));
console.log(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]));
진행중인 작업이 있을 동안 while문을 돌리고
첫 번째 개발이 끝나기 까지 필요한 날짜를 남은 완성도를 속도로 나눈 값에 Math.ceil() 을 이용해서 구해준다.
Array.map() 을 이용하여 첫번째 개발에 필요한 날짜만큼 일을 진행시킨다.
진행시킨 개발작업 배열을 for문으로 첫 요소부터 확인하여 진행률이 100%이면
해당 작업과 초를 Array.shift()를 이용하여 삭제한다.
100%미만이면 for문을 멈추고 while문을 진행시켜 완성 된 작업이 몇 개인지 answer 배열에 넣어준다.
Refactoring
function solution(progresses, speeds) {
let answer = [0];
// needDay = 개발에 필요한 날짜의 배열
let needDay = progresses.map((progress, index) =>
Math.ceil((100 - progress) / speeds[index]),
);
// 개발에 필요한 최대 날짜를 needDay[0]으로 초기화
let maxDay = needDay[0];
for (let i = 0, j = 0; i < needDay.length; i++) {
// 개발에 필요한 날짜가 최대 날짜보다 낮으면
// 이미 개발 된 것이기 때문에
if (needDay[i] <= maxDay) {
// 정답배열에 1을 더해준다.
answer[j] += 1;
} else {
// 최대날짜를 필요한 날짜로 초기화 하고
maxDay = needDay[i];
// 정답 배열 다음 칸에 1을 넣어준다.
answer[++j] = 1;
}
}
return answer;
}
console.log(solution([93, 30, 55], [1, 30, 5]));
console.log(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]));
개발에 필요한 날짜의 배열(needDay)을 만들고 개발에 필요한 최대 날짜를 배열의 첫 요소로 초기화한다.
needDay를 for문을 이용하여 해당요소가 개발 되었으면 answer 요소를 1 더해주고
개발이 덜 되었으면 다음 요소에 1을 더해주는 식이다.
'ALGORITHM > 프로그래머스 With JS' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 / Javascript (0) | 2021.05.02 |
---|---|
[프로그래머스] 프린터 / Javascript (0) | 2021.05.01 |
[프로그래머스] 다리를 지나는 트럭 / Javascript (0) | 2021.04.29 |
[프로그래머스] 위장 / Javascript (0) | 2021.04.29 |
[프로그래머스] 체육복 / Javascript (2) | 2021.04.28 |
댓글