프린세스 다이어리

[프로그래머스] 프로그래머스 팀의 기능개발하기 문제 - 자바스크립트로 구현 본문

자료구조, 알고리즘

[프로그래머스] 프로그래머스 팀의 기능개발하기 문제 - 자바스크립트로 구현

개발공주 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
Comments