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;
}'프로그래머스 > Lv2' 카테고리의 다른 글
| [프로그래머스/Javascript] Lv.2 H-Index (0) | 2026.02.06 |
|---|---|
| [프로그래머스/Javascript] Lv.2 구명보트 (0) | 2026.02.04 |
| [프로그래머스/Javascript] Lv.2 카펫 (0) | 2026.02.03 |
| [프로그래머스/Javascript] Lv.2 N개의 최소공배수 (0) | 2026.02.02 |