https://programmers.co.kr/learn/courses/30/lessons/42586
1.성공한 코드
1-2.
function solution(progresses, speeds) {
var answer = [];
var days = [];
//배포가능일(몇일 뒤)
for(var i=0; i<progresses.length; i++){
days.push(Math.ceil((100-progresses[i])/speeds[i]));
}
console.log(days);
//실제 배포가능일**
while(days.length>0){
var first = days[0];
var count = days.findIndex(num=> first<num);
if(count !== -1){
answer.push(count);
days.splice(0, count);
}else{
answer.push(days.length);
days.splice(0, days.length);
}
}
return answer;
}
1-1.
function solution(progresses, speeds) {
var answer = [];
var len = progresses.length;
var temp =[];
for(var i=0; i<len; i++){
var days = Math.ceil((100 - progresses[i])/speeds[i]);
temp.push(days);
}
while(temp.length>0){
var first = temp.shift();//shift가 queue에서 주로 사용!!
var together = temp.findIndex(val => val>first);
if(together === -1){
answer.push(temp.length +1);
temp = [];
} else{
answer.push(together+1);
temp.splice(0,together );
}
}
return answer;
}
function solution(progresses, speeds) {
var answer = [];
var len = progresses.length;
var temp =[];
for(var i=0; i<len; i++){
var days = Math.ceil((100 - progresses[i])/speeds[i]);
temp.push(days);
}
while(temp.length>0){
var first = temp.shift();
if(temp.some(day => day < first)){
var together = temp.filter(day => day < first);
var len2 = together.length;
var count = len2 + 1;
for(var i=0; i<len2; i++){
temp.splice(0,1);
}
answer.push(count);
} else {
answer.push(1);
}
}
return answer;
}
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses => 먼저 배포되어야 하기 때문에 filter를 쓰면 안되는데, 그 부분을 간과함.
#Queue. FIFO
slice, splice 차이. 원본 배열을 변화시키는지의 여부.