https://school.programmers.co.kr/learn/courses/30/lessons/42586
[풀이]
- 각 기능은 진도가 100% 일 때 배포 가능
- 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발되더라도 앞에 있는 기능이 배포될 때 함께 배포 ---> Queue 활용
: 반올림하여 가장 작은 정수 반환함
ex)
console.log(Math.ceil(0.95)) // 1
[코드]
function solution(progresses, speeds) {
var answer = [0]; //stack 넣을 공간
// 각각의 기능이 배포되는데 걸리는 시간을 구한다.
const releaseDays = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
// console.log('🍀', releaseDays); //[ 7, 3, 9 ]
let max = releaseDays[0];
for(let i = 0; i < releaseDays.length; i++) {
if(releaseDays[i] <= max){
answer[answer.length - 1] += 1;
}else{
max = releaseDays[i];
answer.push(1);
}
}
console.log('🍀', answer);
return answer;
}
solution([93, 30, 55], [1, 30, 5]) //test1
<test1>
releadays = 각각 process 를 speeds 에 진도 100이 될 때 걸리는 시간을 구한다 [7, 3, 9]
3번 for 문 돌리면서
i=0 | releadays[0] <= releadays[0]
ans[0] = 1 //
i=1 | releadays[1] <= releadays[0]
ans[0] = 2 //
i=2 | releadays[2] <= releadays[0]
else -> max = releadays[2]
ans = [2, 1]
<test2> [95, 90, 99, 99, 80, 99]. [1, 1, 1, 1, 1, 1]
releadays = [5, 10, 1, 1, 20, 1]
6번 for문 돌리면서
i=0 | releadays[0] <= releadays[0]
ans[0] = 1 //
i=1 | releadays[1] <= releadays[0] | 10 <= 5 (x else 로)
else -> max = releadays[1] = 10
ans = [1, 1]
i=2 | releadays[2] <= releadays[1] | 1 <= 10
ans[1] = +1 // ans = [1, 2]
i=3 | releadays[3] <= releadays[1] | 3 <= 10
ans[1] = +1 // ans = [1, 3]
i=4 | releadays[4] <= releadays[1] | 20 <= 10 (x else 로)
else -> max = releadays[4] = 20
ans = [1, 3, 1]
i=5 | releadays[5] <= releadays[4] | 1 <= 20
ans[2] = +1 // ans = [1, 3, 2]
'자료구조+알고리즘 > Programmers' 카테고리의 다른 글
[프로그래머스-level2] 조이스틱 - javascript (0) | 2024.03.31 |
---|---|
[프로그래머스-level2] 게임 맵 최단거리 - javascript (0) | 2024.03.26 |
[프로그래머스_lv2] 타겟 넘버 (javascript) (0) | 2024.03.08 |
[프로그래머스_Lv.1] 바탕화면 정리 (javascript) (0) | 2024.02.27 |
[프로그래머스_lv1] 카드 뭉치 (javascript) (0) | 2024.02.26 |