기능개발 js

Y b·2024년 4월 1일

문제

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.

또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.

먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.

문제풀이 과정

우선 progresses의 배열을 speeds에 따른 제출 가능일이 담긴 배열을 만들어야 했다.

[93,30,55]의 진도가 담긴 배열의 speeds [1,30,5]를 적용하여 몇일이 걸리는지 도출해낸다.
그러면 [7,3,9]란 배열이 나와야 한다.

    const newA = progresses.map((item,index) => {
        return Math.ceil((100-item)/speeds[index]);
    })

위의 배열처럼 arra.map 매서드로 부족하더라도 모조리 올림하도록 해서 map을 도출했다.

'각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.'

라는 전제조건에 따라 이제 작은 수가 더 먼저 배포가 가능한 일으로 [7,3,9]라는 배열은
[2,1]로 도출되어야 했다.

하지만 여기서 첫번째 배열요소와 마지막의 경우를 어떻게 해야할지 헷갈렸고,

첫 번째 오답:

function solution(progresses, speeds) {
    var answer = [];
    let count =1 
    const newArray = progresses.map((item,index) => {
        return Math.ceil((100-item)/speeds[index]);
    })
        for(let i=1; i<newArray.length+1; i++){
            if(newArray[i-1]<newArray[i]){
                answer.push(count)
                count=1
            }else{
                count++
            }
            if(i===newArray.length){
                answer.push(count-1)   
            }
    }   
    return answer;
}

두 번째 오답:

function solution(progresses, speeds) {
    var answer = [];
    let count =0
 
    const newA = progresses.map((item,index) => {
        return Math.ceil((100-item)/speeds[index]);
    })
    
    for(let i=0; i<newA.length; i++){
        count++
        if(newA[i]>=newA[i+1]){
                count
            }else{
                answer.push(count)
                count=0
            }
    }
    return answer;
}

테스트 케이스에서만 맞는 답을 내놓았다.

크기를 비교할 때 다음 수와 비교하기만 했는데,
그게 아니라 크기에 따라 변수를 재할당하여 값을 넣도록 했다.

최종 정답

function solution(progresses, speeds) {
    var answer = [];
    const newA = progresses.map((item,index) => {
        return Math.ceil((100-item)/speeds[index]);
    })
    let max = newA[0];
    let count =1;
    
    for(let i=1; i<newA.length; i++){
        if(newA[i] <= max){
            count++
        }else{
            max = newA[i];
            answer.push(count);
            count =1;
        }
    }
    answer.push(count)
    return answer;
}
profile
웹 개발자

0개의 댓글