프로그래머스/Lv2

[프로그래머스/Javascript] Lv.2 기능개발

woo.oing 2026. 2. 9. 15:05

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

✓ 문제

 

각 기능별 현재 작업 진도(progresses)와 작업 속도(speeds)를 받아 한 번의 배포마다 몇 개의 작업이 배포되는지 배열로 반환
작업은 순서대로 배포되며 이전 작업보다 빠르게 개발된 작업은 이전 작업 배포시 함께 배포

 


✓ 풀이과정

 

0. 입력

progresses = [93, 30, 55]

speeds = [1, 30, 5]

 

 

1. 각 작업의 소요시간 계산

Math.ceil((100 - p) / speeds[i]

 

(100-93)/1 = 7

(100-30)/30 = 2.33... → 3

(100-55)/5 = 9

 

dates = [7, 3, 9]

 

 

2. 배포 그룹 묶기

max >= date → 이전 작업과 하루에 함께 배포

max < date → 이전 작업과 별도로 배포

 

date = 7, max = 7

    → 7 >= 7 [O] cnt = 1

 

date = 3, max = 7

    → 7 >= 3 [O] cnt = 2

 

date = 9, max = 7

    → 7 >= 9 [X]

    → 7 < 9 [O] days = [2] cnt = 1 max = 9

 

마지막 배포 그룹 추가 days = [2, 1]

 

 

3. 결과 반환

days = [2, 1]

 

 

✓ 최종코드

function solution(progresses, speeds) {
  let dates = progresses.map((p, i) => Math.ceil((100 - p) / speeds[i]));
  let days = [];
  let cnt = 0;
  let max = dates[0];

  for (const date of dates) {
    if (max >= date) {
      cnt++;
    } else {
      days.push(cnt);
      cnt = 1;
      max = date;
    }
  }

  days.push(cnt);

  return days;
}