본문 바로가기
Web development/Algorithm

[프로그래머스] 기능개발 (javascript)

by 자몬다 2021. 8. 20.

풀어보러 가기 : https://programmers.co.kr/learn/courses/30/lessons/42586

 

완성까지 남은 기간을 담은 배열을 만들고(remains)

 

remains의 반복을 돌면서

앞의 수보다 큰 수가 나오면 세트로 배포되고, 앞의 수보다 작은 수가 나오면 새로운 배포가 된다.

[5, 10, 1, 1, 20, 1]=> 5, 10 / 1, 1, 20 / 1 => [2, 2, 1]

이렇게 되어야 하므로

 

remains[0] = 5 첫 기능은 무조건 먼저 배포되므로 초기값으로 1 추가 answer = [1];
remains[1] = 10 remains[0] < remains[1]이므로 함께 배포됨. answer[마지막요소]++; answer = [2];
remains[2] = 1 remains[1] > remains[2]이므로 새로운 배포 추가됨. answer.push(1); answer = [2, 1];
remains[3] = 1 remains[2] < remains[3]이므로 함께 배포됨. answer[마지막요소]++; answer = [2, 2];
remains[4] = 20 remains[3] < remains[4]이므로 함께 배포됨. answer[마지막요소]++; answer = [2, 3];
remains[5] = 1 remains[4] > remains[5]이므로 새로운 배포 추가됨. answer.push(1); answer = [2, 3, 1];

 

 

function solution(progresses, speeds) {
    if(progresses.length < 1) return [];
    var answer = [1];
    // 완성까지 몇일이 걸리는지 계산한 배열을 만든다.
    // [5, 10, 1, 1, 20, 1]
    const remains = [];
    for(let i = 0; i<progresses.length; i++) {
        remains.push(Math.ceil((100-progresses[i])/speeds[i]));
    }
    // 반복을 돌면서 앞의 수보다 큰 수가 나올 때까지 센다.
    // [1, 3, 2]
    let temp = remains[0];
    for(let i=1;i<remains.length;i++) {
        // 기준이 되는 앞의 수가 더 크면 배포 갯수를 올린다.
        if(temp >= remains[i]) {
            answer[answer.length-1]++;
        } else {
            // 더 큰 수가 나타나면 기준이 되는 수를 바꾸고 새로운 배포를 추가한다.
            temp = remains[i];
            answer.push(1);
        }
    }
    // console.log(answer);
    return answer;
}

 

 

댓글