[JS][프로그래머스 -LEVEL 2 - 광물캐기 ]

정대만·2023년 7월 30일

코딩테스트

목록 보기
35/51
post-thumbnail

광물 캘때 피로도가 발생한다,
피로도가 적게 발생하는 경우를 찾는 문제

곡갱이의 수는 한정되어있다. > 다캘수는 없고 캘수있는 광물의 수는 한정되어있다.
곡갱이는 한번쓴경우 -=1 된다.

해결방법

  • 곡갱이를 어떻게 선택할수있을까?

    picks.findIndex((el)=>el!=0);
    을 사용하여 곡갱이를 선택하는 방법으로 하였다.

  • 곡갱이 수에 따른 광물 뽑아내기

    var gogk__total=picks.reduce((ac,cure)=>ac+cure)*5;
    minerals= minerals.splice(0,gogk__
    total);
    광물 이만큼만 쓰겠다는 의미
    var fist= minerals.splice(0,5);
    splice 함수로 잘라낸다고 생각하면된다.

      
  • 다이아 몬드 갯수로 내림차순 하기

코드

function solution(picks, minerals) {
  var obj={
      0:[1,1,1],
      1:[5,1,1],
      2:[25,5,1]
  }  
  const name_index=function(name){
      if(name=='diamond'){
          return 0;
      }
          if(name=='iron'){
          return 1;
      }
          if(name=='stone'){
          return 2;
      }
      
  }


    const name__index=function(name){
      if(name=='diamond'){
          return 10;
      }
          if(name=='iron'){
          return 2;
      }
          if(name=='stone'){
          return 1;
      }
      
  }
  

  
  
  var main__ar=[];

  
var gogk____total=picks.reduce((ac,cure)=>ac+cure)*5;
 minerals=   minerals.splice(0,gogk____total);
  for(var i=0; i<gogk____total; i++){
      
      var fist= minerals.splice(0,5);
      var count=0;
       fist.map((el)=>{
         count+=name__index(el)
       })
      main__ar.push([count,fist])
      i+=4;
      
  }  
 
  main__ar.sort((a,b)=>{ return b[0]-a[0]
        
  });
       var totla_count=0;

 for(var ii=0; ii<main__ar.length; ii++){
 

  
   var gogk___=picks.findIndex((el)=>el!=0);

    var [_,start]= main__ar[ii];
    
    start.map((ev)=>{
    totla_count+=obj[gogk___][name_index(ev)] 
    })
    picks[gogk___]-=1; 
 }
  return (totla_count)  
  
}

처음에는 광물을 5 개씩 자를때 처음 index 와, 끝 index 를 통해서 다시 얻어내는 과정을 사용했는데 에러가 나서 몇번 생각하다보니 이 방법이 더 빠를거 같아서 고쳤다.

그리고 다이아몬드를 3 철 2 돌 1 로 했더니 오류나서 그냥 10 으로 바꿧더니 오류가 해결되었다. 아무래도 다이아몬드가 25 라는 큰수 이기 때문에 몇개의 테스트 케이스에서 오류가 발생하는듯 하다.

profile
안녕하세요

0개의 댓글