프론트엔드 개발자의 기록 공간

[프로그래머스 JavaScript] 기능개발 본문

알고리즘_JS/프로그래머스_Level2

[프로그래머스 JavaScript] 기능개발

[리우] 2021. 7. 21. 22:10

🚩 프로그래머스 Level2 짝지어 제거하기

📖 문제 설명

progresses(작업진도) + speeds(작업속도) = 진행률입니다.

진행률이 100%가 되면 배포가 진행되는데 이때 배포되는 기능의 수를 각 단계마다 저장하면된다.

주의할점은 앞에 기능이 배포가 되어야지만 뒤에가 배포가 됩니다.

 

 

👉 소스 코드  ⏰시간복잡도 O(n^2)

function solution(progresses, speeds) {
    var answer = [];
    //배포된 기능의 수
    let deploy = 0;    
    
    //모든 작업이 끝날때까지
    while(progresses.length > 0){
        //진행률 계산
        for(let i=0; i<progresses.length; i++){
            //작업진도 + 작업속도 = 진행률
            progresses[i] += speeds[i];
        }
        
        while(true){
            //제일 앞에있는 기능이 완료된 상태면 배열에서 제거
            if(progresses[0] >= 100){
                deploy +=1;
                progresses.shift();
                speeds.shift();
            }
            //아직 완료되지 않은 상태
            else{
                //앞에 완료된 작업이있으면 개수 삽입후 종료
                if(deploy !==0){
                    answer.push(deploy);
                }
                deploy = 0;
                break;
            }
        }
    }
    return answer;
}

👨‍💻 코드 설명

step1. progresses 배열길이가 0이상일때까지 반복 (배포가 수행되면 해당 기능 삭제하기 때문에)

step2. 반복문을 통해 한번의 작업을 수행해준다. (작업진도+작업속도)

step3. 한번 작업 수행 후, 배포 조건이 만족되면 배포기능+1 해준 뒤,  각각의 배열값을 없애준다.

3-1 배포 조건이 만족안되면 배포된 기능까지 저장후 break로 반복문 탈출해준다.

step4. 위의 과정을 반복한다.

728x90
Comments