프로그래머스 #JavaScript - 기능개발

SSO·2020년 1월 26일
0

프로그래머스 Lv2

목록 보기
8/46

문제

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;
}
  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();
    
    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 차이. 원본 배열을 변화시키는지의 여부.

profile
happy

0개의 댓글