새소식

Programmers

[Programmers] 주차 요금 계산 문제 - (javascript)

  • -
728x90
문제 이름 :  주차 요금 계산

 

<<< 문제 내용 >>>

문제의 내용이 굉장히 길기 때문에
https://programmers.co.kr/learn/courses/30/lessons/92341 을 참고하세요.

 

function solution(fees, records) {
    let answer = [];
    
    const toMinute = (index) => {
        index = index.split(':').map(Number);
        return index[0]*60+index[1];
    }
    
    let carInfo = {};
    let allPkTime = {};
    
    records.map((el, i)=>{
        let info = el.split(' ');
        if(info[2] === 'IN'){
            carInfo[info[1]] = info[0];
        }else{
            const outTime = toMinute(info[0]);
            const inTime = toMinute(carInfo[info[1]]);
            const parkingTime = outTime - inTime;
            
            if(info[1] in allPkTime){
                allPkTime[info[1]] += parkingTime;
            }else{
                allPkTime[info[1]] = parkingTime;
            }
            delete carInfo[info[1]];
        }
    })
    
    for(const i of Object.entries(carInfo)){
        const lastTime = toMinute("23:59");
        const inTime = toMinute(i[1]);
        const parkingTime = lastTime - inTime;
        
        if(i[0] in allPkTime){
            allPkTime[i[0]] += parkingTime;
        }else{
            allPkTime[i[0]] = parkingTime;
        }
    }
    
    allPkTime = Object.entries(allPkTime);
    
    allPkTime.sort((a,b)=> a[0] - b[0]).map((el)=>{
        const parkingTime = (el[1] - fees[0])%fees[2] === 0 ? 
              Math.floor((el[1] - fees[0])/fees[2]) : Math.floor((el[1] - fees[0])/fees[2])+1;
        
        if(parkingTime<0){
            answer.push(fees[1]);
        }else{
            answer.push(fees[1] + (parkingTime*fees[3]));
        }
    });
    
    return answer;
}

* 카카오 2022 블라인드 채용 문제 중 하나였다.

구현 문제였고, 특별한 알고리즘이 들어가는 것은 아니어서 많이들 다른 방식으로 푼 것 같았다.

 

블라인드 채용 때 파이썬으로 이 문제를 풀었었는데 그땐 나름 빠르게 풀었었다.

한참이 지나고서야 js로 다시한번 풀어보았는데 음.. 생각보다 오래걸려버렸다.

아마 그 이유는 문제 내용을 한번 풀어봤던거니 대충 읽고 넘어가서, 열심히 코딩하고 조건을 고려하지 않는

구현에서는 가장 치명적인 문제를 거듭했다..

 

그래도 여기서 배우게된건 구현할때는 먼저 모든 조건을 정리해두고 시작하는게 좋다는 것이다.

 

 

+ 나는 요즘 간단하게 단발성으로 메모할 수 있는 전자노트를 이용하고 있다.

광고는 아니고 다이소에서 싸게 5천원이면 구매할 수 있다.

필기감도 괜찮아서, 문제풀 때 유용하게 쓰일 수 있으니 아이패드나 갤럭시 탭 등이 없다면 고려해볼만 하다.

장점은 너무너무 가볍고, 단점은 불끄면 안보이는 정도..?

 

도움이 되셨다면 공감 부탁드립니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.