본문 바로가기
Algorithm/프로그래머스

Level2. 프로그래머스 기능개발 - JavaScript

by 강깅꽁 2020. 10. 28.
반응형

 

function solution(progresses, speeds) {
    const answer = [];
    const progressArr = progresses.map( (progress, idx) => ({ progress, speed: speeds[idx] }) );
    while( progressArr.length !== 0 ){
        // 개발
        progressArr.forEach( obj => obj.progress += obj.speed );
        
        // 배포
        const firstProgress = progressArr[0].progress;
        if( firstProgress >= 100 ) {
            const idx = progressArr.findIndex( obj => obj.progress < 100);
            let deployedArr;
            // 전부 배포
            if(idx === -1) deployedArr = progressArr.splice(0);
            // 완료된 부분까지 배포
            else deployedArr = progressArr.splice(0, idx);
            answer.push(deployedArr.length);
        } 
    }
    return answer;
}

문제 설명

개발해야할 기능들의 진행 상황은 progresses, 기능 개발 속도는 speeds에 들어가 있다.

하루 동안 기능을 개발하고 하루의 끝에 배포할 수 있다.

이때, 앞에 있는 기능 개발이 끝나지 않으면 뒤에 있는 기능은 배포될 수 없다.

 

두 번째 예시는 다음과 같다.. 

 

진행 상황: 95  90  99  99  80   99

개발 속도: 1    1   1    1   1     1

 

1일 후

다른 기능 개발이 완료되었지만 완료된 기능 앞에 있는 기능이 완료되지 않아서 뒤에 배포가 될 수 없다. 

진행 상황: 96  91  100  100  80  100

 

5일 후

첫 번째 기능 개발 완료 되어 배포가 진행된다.

하지만 그 뒤에 있는 기능이 95이기 때문에 이후의 기능은 배포가 진행되지 않는다.

진행 상황: 100 95 100 100 85 100

 

접근

이제 문제의 규칙성을 알았기 때문에 간단하게 문제 해결을 위한 절차를 작성한다.

1. 기능 개발 시작

2. 배포가 가능한지 확인

3. 배포가 가능하다면 기능들을 배포 한다. 단, 배포 중에 완료되지 않은 기능이 있다면 멈춘다. 

반복