본문 바로가기
알고리즘/자료구조

[프로그래머스] Lv 2. 기능 개발 - Javascript 풀이

by daami 2025. 2. 5.

💡 유형: 스택/큐

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

구현

<조건>

- 각 기능의 개발속도는 모두 다르다.

- 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포된다.

- progresses: 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열

- speeds: 각 작업의 개발 속도가 적힌 정수 배열

- 구하는 것: 각 배포마다 몇 개의 기능이 배포되는지

 

1. 각 작업마다 100%까지 작업량을 구하여 큐(days)에 삽입한다.

2. 첫 번째 작업이 완료될 때, 같이 배포할 수 있는 작업들을 큐에서 꺼내면서(shift()) 카운트한다. 

=> 같이 배포할 작업들: 첫 번째 작업보다 일찍 끝나는(작업량이 작은) 작업들

3. 한 번에 몇 개의 기능이 배포되는지 deploy 배열에 저장한다.

풀이

function solution(progresses, speeds) {
    let deploy = [];
    const days = progresses.map((progress,idx)=> Math.ceil((100-progress)/speeds[idx])); //각 작업이 완료되기까지 걸리는 날짜

    while(days.length>0){
        let count = 1;
        let first = days.shift();

        while(days.length>0 && days[0] <= first){
            days.shift();
            count++;
        }
        //배포
        deploy.push(count);
    } 

    return deploy;
}

 

큐 자료구조를 사용하는 것이 익숙하지 않아 오래 걸렸다. 레벨 1부터 풀어보아야겠다.