[프로그래머스] Lv2. 주차 요금 계산 - JavaScript

이상돈·2023년 3월 17일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 2

출처 : 프로그래머스 - 주차 요금 계산

문제

제한사항

📌 내가 생각한 풀이

객체, new Date()를 이용하여, 우선 각 차량별로 IN, Out시간을 계산하여, 차량별 이용시간을 구하자. 차량별 이용시간을 구한다음, fees 배열을 이용하여 주차요금을 계산하자.
function solution(fees, records) {
    var answer = [];
    var recordObj = {};
    let timeObj = {};
    let newObj = {};
    records = records.map((data)=>data.split(' '));
    records.map((d,i)=>{
        if(recordObj[d[1]] == undefined && d[2] === 'IN'){
            let day = new Date(`2023-03-16 ${d[0]}:00`)
            recordObj[d[1]] = [day]
        }else{
            let day = new Date(`2023-03-16 ${d[0]}:00`)
            recordObj[d[1]] = [...recordObj[d[1]], day]
        }
    })
    let entries = Object.entries(recordObj);
    entries.map((data)=>{
        let val = data[1];
        if(val.length %2 ===0){
            let time = 0;
            for(var i =0; i<val.length; i+=2){
                let timeDiff = val[i+1].getTime() - val[i].getTime();
                let min = timeDiff / (60 * 1000);
                time+=min;
            }
            timeObj[data[0]] = time;
        }else{
            val.push(new Date('2023-03-16 23:59:00'));
            let time = 0;
            for(var i =0; i<val.length; i+=2){
                let timeDiff = val[i+1].getTime() - val[i].getTime();
                let min = timeDiff / (60 * 1000);
                time+=min;
            }
            timeObj[data[0]] = time;
        }
    })
    let key = Object.keys(timeObj).sort();
    key.map((d)=>{
        let time = timeObj[d];
        time -= fees[0];
        if(time <= 0){
            answer.push(fees[1])
        }else{
            let money = fees[1] + Math.ceil(time/fees[2])*fees[3];
            answer.push(money);
        }
    })
    return answer;
}

📌 느낀점

이번 문제는 해결방법이 바로 생각났다. 그래서 천천히 풀었다. 여기서 하나 알게된 점은 객체를 저장할때 넣은 순서와 상관없이, 정렬되어 추가된다는 점이다. 또한 new Date()를 이용하여 시간을 구하면 더욱더 간단하고 정확하게 시간차이를 구할 수 있다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글