[알고리즘/자바스크립트] 프로그래머스 - 기능개발

Song·2021년 6월 24일
0

알고리즘

목록 보기
15/22

문제링크

문제 설명

1개 이상의 작업의 진도율과 각 작업의 개발 속도가 progresses[]와 speeds[] 배열로 주어진다.
완료된 작업은 배포되는 데, 순차적으로 이뤄져야하며 만약 두번째 작업이 첫번째 작업보다 먼저 완성이 되더라도 첫번째 작업이 완성될 때까지 기다린 후 같은 날에 배포가 된다.
한번 배포 할 때 총 몇개의 작업이 배포되는 지 반환하라

주제

  • 큐 / 스택

난이도

  • level 2

풀이 전 생각

자바스크립트..가즈아

풀이

function solution(progresses, speeds) {
    let days = 0        // 개발이 걸리는 속도
    let count = 0       // 하루에 배포된 작업의 수
    var answer = [];    // 하루에 배포된 작업의 수를 저장하는 배열
    
    // 작업이 모두 완료될 때까지 반복 진행
    while (progresses[0]) {  
        // 큐 기준 첫번째로 있는 작업을 기준으로 진행
        if (progresses[0] + days * speeds[0] >= 100) {              
            // 완료된 작업은 큐에서 제거한다.
            progresses.shift()
            speeds.shift()
            // 완료된 작업 수만큼 count 증가
            count += 1
        } else {
            // 만약 현재 작업이 직전에 완료된 작업(들)보다
            // 시간이 걸린다면 앞서 배포한 작업의 개수부터 answer 배열에 넣어준다. 
            if (count != 0) {
                answer.push(count)
                count = 0
            }
             days += 1 
        }                         
    }
    // 마지막 작업이 끝나면 while문이 종료됨으로 while문 밖에서 배포된 작업의 수를 넣어준다. 
    answer.push(count)
    return answer;
}

풀이 방법

  1. 큐 형식을 이용하였다.
  2. 배포가 완료된 작업은 큐에서 제거하고 count는 증가
  3. 다음 작업의 시간이 추가로 걸린다면 앞서 완료된 작업들은 배포한 걸로 취급
  4. 큐안에 있는 작업들이 사라질 때까지 2,3번 반복

문제를 풀고 알게된 개념 및 소감

  • 자바스크립트로 알고리즘은 처음이라 구글의 도움을 많이 받았다.
    물론 훨씬 간결한 답안들도 많았지만 당장 내가 구현하기에는 어려워보여
    우선은 내가 이해할 수 있는 예제를 참고해봤다. 내일 본격적으로 노드 주특기가 시작되는데
    그 때 문법적으로 더 탄탄히 쌓아서 다른 답안들도 보고 이해할 수 있으면 좋겠다.
profile
Learn From Yesterday, Live Today, Hope for Tomorrow

0개의 댓글