[프로그래머스] 코딩테스트연습 > 스택/큐 > 기능개발
알고리즘/javascript

[프로그래머스] 코딩테스트연습 > 스택/큐 > 기능개발

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

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

function solution(progresses, speeds) {
    let answer = [0];
    const remainingDay = progresses.map((el, idx) => Math.ceil((100-el)/speeds[idx]) )
    let maxDay = remainingDay[0]
    
    
    for(let i=0, j=0; i<remainingDay.length; i++){
        if(remainingDay[i] <= maxDay){
            answer[j] += 1
        } else {
            maxDay = remainingDay[i]
            j++
            answer[j] = 1
        }
    }
    return answer
}
  1. 기능별 남은 날짜를 계산한다.
    1. 각 progress를 100에서 빼서 남은 %를 구한다.
    2. 남은 %를 각 progress별 speed로 나눈다.
    3. 날짜계산이므로 소수점은 올림해서 남은 날짜를 구한다.
  2. 남은날짜의 첫번째 value를 maxDay에 할당한다. (가장 오래 걸리는 기능 남은 날짜)
  3. remainingDay Array에서 다음 가장 오래 걸리는 기능이 나오기 전까지는 이전 가장 오래 걸리는 기능이 끝나야 다음 기간으로 넘어가므로 가장 오래 걸리는 기능의 기간만 잡아주면 된다.
    1. answer 의 각 value 는 해당 기간에 완성되는 기능 개수 
    2. 현재 기능의 남은 날짜가 maxDay 이하이면 현재 기간에 완성되는 기능 개수 +1
    3. 현재 기능의 남은 날짜가 maxDay 보다 크면 answer의 다음 요소에 +1

Array.map( (element, index) => return ) : return한 값으로 이루어진 새로운 array 생성

반응형