프로그래머스 - [Level 2] 기능 개발(JAVASCRIPT)

less than 1 minute read

프로그래머스 기능 개발

카테고리 : 스택/큐

1) queue에 작업완료까지 걸리는 시간을 넣어준다.
2) queue의  번째 값을 기준으로,  기준 값보다
작업 완료시간이  때까지 queue를 shift해주며, 배포 count를 늘려준다.

쉽게 말해
queue에는 [7,5,3,9,2]
now=7, count=1 일이라고  ,
next=5 , count=2
next=3 , count=3
까지 탐색을 해주고, count=3 배포 해준다.

마찬가지로  다음 now (now=9) 잡고  과정을 반복하면
답이 도출된다.

소스코드

function solution(progresses, speeds) {
    let answer = [];
    let queue=[];

    for(let i=0;i<progresses.length;i++){
        let rem=100-progresses[i];
        let day=0;
        day+=Math.ceil(rem/speeds[i]);
        queue.push(day);
    }
    
    let cnt=1;
    let now=queue.shift();
    let next=queue.shift();
    let sum=0;
    
    while(true){
        if(sum===progresses.length) break;
        if(now>=next){
            cnt++;
            next=queue.shift();
        }else{
            answer.push(cnt);
            sum+=cnt;
            cnt=1;
            now=next;
            next=queue.shift();
        }
    }
    
    return answer;
}

다른 사람의 풀이

map을 활용해 간단하게 풀이했다. 그리고 for문 로직도 깔끔할게 잘 짠것같다.

function solution(progresses, speeds) {
    let answer = [0];
    
    // progres,index => 값,인덱스
    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;
}

Leave a comment