프로그래머스 - [Level 2] 기능 개발(JAVASCRIPT)
카테고리 : 스택/큐
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