알고리즘 이론 & 풀이/프로그래머스

프로그래머스 Lv.2 | (스택/큐) 기능개발 js

페블_ 2023. 8. 9. 18:11

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42586?language=javascript 

풀이

큐로 풀었다.

  • 기능개발에 걸리는 기간은 Math.ceil((100 - progresses[0]) / speeds[0])
  • 맨 앞에 있는게 안 나가면 뒤에는 맨 앞 날짜보다 작거나 같은 날짜가 계속 쌓이게 된다.
  • 날짜 배열의 [0]번보다 큰 날짜가 나온다면 그동안의 기능들을 다 배포하게 되는데, 개발한 기능의 개수를 세주고 날짜 배열을 비우고, 새로운 날짜 기준부터 다시 시작한다.
function solution(progresses, speeds) {
    const answer = [];
    let dates = [Math.ceil((100 - progresses[0]) / speeds[0])];
    if(progresses.length === 1) {
        return [1];
    }
    for(let i = 1; i < progresses.length; i++) {
        let date = Math.ceil((100 - progresses[i]) / speeds[i]);
        
        if(dates[0] >= date) {
            dates.push(date);
        } else {
            answer.push(dates.length);
            dates = [date];
        }
        
        if(i === progresses.length - 1 && dates.length > 0) {
            answer.push(dates.length);
        }
    }
    return answer;
}