자료구조, 알고리즘
[프로그래머스] 프로그래머스 팀의 기능개발하기 문제 - 자바스크립트로 구현
개발공주
2021. 10. 23. 15:01
728x90
function solution(progresses, speeds) {
let answer = [];
let workDays = progresses.map((work, i) => Math.ceil((100 - work) / speeds[i]))
let prodDay = 0;
for (let i = 0; i < workDays.length; i++) {
if (prodDay < workDays[i]) {
answer.push(1);
prodDay = workDays[i];
} else {
let temp = answer.pop();
answer.push(++temp);
}
}
return answer;
}
진도 | 95 | 90 | 99 | 99 | 80 | 99 |
속도 | 1 | 1 | 1 | 1 | 1 | 1 |
소요기간(일) | 5 | 10 | 1 | 1 | 20 | 1 |
1. 소요기간 workDays를 먼저 구함. 무조건 올림해서 기간을 산정하면 되기 때문에 Math.ceil() 내장함수를 사용했다.
let workDays = progresses.map((work, i) => Math.ceil((100 - work) / speeds[i]))
2. 그리고 소요기간 workDays 배열을 for문으로 돌면서 이전까지의 최대 소요기간(배포일자)보다 큰 경우와 그렇지 않은 경우를 분기했다.
(1) 소요기간이 배포일자보다 크면 다른 날을 잡고 새로 배포해야 하므로 배포일정 배열에 1을 push()한다
if (prodDay < workDays[i]) {
answer.push(1);
prodDay = workDays[i];
}
(2) 소요기간이 배포일자보다 작거나 같으면 이전에 배포하기로 한 날짜에 같이 배포하면 되므로 배포일정 배열에서 마지막 원소를 pop()한 후 프로젝트 갯수만 1 더해서 다시 push() 한다.
else {
let temp = answer.pop();
answer.push(++temp);
}
답 잘 나온다.
코딩테스트 연습 - 기능개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는
programmers.co.kr
728x90