[프로그래머스] 기능개발 Javascript

김아현·2022년 4월 26일
0

문제 보기

🔒 문제

🔐 해결 과정

  1. 각 기능별로 (100-progress)/(speed)를 올림으로 계산해 몇 일뒤에 완성되는지 알아낸다.
  2. 앞기능이 뒷기능보다 남은 일수가 많이 남았다면, 앞기능의 남은 일수보다 적은 뒷기능들을 같이 배포한다.

🔓 풀이 (30m)

function solution(progresses, speeds) {
    let fin_days = speeds.map((_,i) => Math.ceil((100-progresses[i])/speeds[i]));
    let result = [];
    let prev = fin_days.shift();
    let cnt = 1;
    
    while(fin_days.length) {
        let next = fin_days.shift();
        if(prev >= next) {
            cnt++;
        } else {
            result.push(cnt);
            cnt = 1;
            prev = next;
        }
        if(!fin_days.length) result.push(cnt);
    }
    return result;
}

스택/큐 문제이고 최대 길이도 100이여서, 최대한 값을 뽑아내면서(?) 풀어가고 싶었다.

🔁 feedback

변수가 많고 조건에 따라 값을 바꿔주는 것도 많아서 가독성이 조금 떨어지는 듯하다.

+ 다른사람의 풀이

function solution(progresses, speeds) {
    let answer = [0];
    let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
    let maxDay = days[0];

    for(let i = 0, j = 0; i< days.length; i++){
        if(days[i] <= maxDay) {
            answer[j] += 1;
        } else {
            maxDay = days[i];
            answer[++j] = 1;
        }
    }

    return answer;
}

for문을 정의할 때 for문 내부에서 사용하는 변수 j를 같이 넣어준 게 기발하다. 증감연산자로 데이터를 넣을 배열의 인덱스를 바꾸는 것도 좋아보였다. 나중에 나도 써봐야지.

profile
Want to be backend developer

0개의 댓글