[JS][프로그래머스 -LEVEL 2 - 주차 요금 계산 ]

정대만·2023년 7월 3일

코딩테스트

목록 보기
12/51
post-thumbnail

풀이 방법

  • 10초라고 했으니 for문을 한번써야되겠다. (이중 포문 xxxx)
  • In 과 Out 을 구분하여 객체 이름 : [ 들어온 시간 , 누적시간] 식으로 구분
  • out 인경우에는 들어온 시간 '*' 을 표시하여 시간 리셋 , 누적시간 카운트
  • 다시 for 문을 돌면서 들어온시간이 '*' 아닌 시간들( out 이 24:00 이후에 나온다고 가정한 시간들을 카운트 해줘서 누적시간에 넣어줌)
  • 돈을 계산
  • 계산까지 다한 식을 sort 을 이용해서 차량 번호가 작은 자동차부터 이름을 두고 새 배열에다가 값만 넣어주고 return

function solution(fees, records) {
    var answer = [];
    // for 문으로 객체 만들어서 시간을 구한다 [들어온시간 , 누적 시간] 출차 나오면 들어온시간 0 으로 셋팅 누적
    //시간에다가 더하기 
    //for 문 끝났는데도 들어온 시간 0 이 아닌 경우에는 / 한번더 정리해줌  < 
    // 그것을 토대로 해서 계산해주기  챠랑 번호가 작은것 부터 계산해야됨요 
    
    var obj_fee={};
    
    for(var i=0; i<records.length; i++){
       var [time, name, ima]= records[i].split(' ');
       var [front,back]= time.split(':');
       var remain_time= parseInt(front)*60+ parseInt(back);
     
        if(ima=='IN'){
            if(!obj_fee[name]){
                obj_fee[name]=[remain_time,0]
            }
            else{
                 obj_fee[name][0]=remain_time
            }
        }
        else if( ima=='OUT'){
              obj_fee[name][1]+=remain_time -obj_fee[name][0];
              obj_fee[name][0]='*';
        }
    }
    //여기서 그냥 계산해버리자 
    for(var i in obj_fee){
   
        if(obj_fee[i][0]!='*'){
             var rem=((23*60)+59)-obj_fee[i][0];
            obj_fee[i][1]+=rem;
            obj_fee[i][0]='*';
        }

        //위에서 한번 계산해준거 이제 1 만 보면됨 
        var [ gibon_time,gibon_fee,bun_time,bun_fee]=fees;
        if( obj_fee[i][1]<gibon_time){
            obj_fee[i]=gibon_fee;
        }
        else{
            //넘었을 경우에는 
             obj_fee[i]= gibon_fee+(( Math.ceil((obj_fee[i][1]-gibon_time)/bun_time) )*bun_fee)
            
        }
        
        
        
    }
   
    var ne_result=[];
    var new_ob=Object.entries(obj_fee).sort((a,b)=>  a[0]-b[0]).map((el)=>{
      ne_result.push(el[1])
    });
    

 
    
    
    return ne_result;
}

profile
안녕하세요

0개의 댓글