Level2 - 주차 요금 계산

손대중·2022년 8월 12일
0

문제 설명 및 링크

https://school.programmers.co.kr/learn/courses/30/lessons/92341?language=javascript

나의 풀이

그렇게 어렵지는 않고 그냥 루프 돌면서 계산하면 되고, 최종 결과는 자동차 번호대로 정렬해서 나가야 하기 때문에 두번 루프 돌림.

코드

모든 프로그래머스 문제 관련 코드들은 https://github.com/crazydj2/programmers 에 있음.

const calculateTime = (inTime, outTime) => {
    const [inHour, inMin] = inTime.split(':');
    const [outHour, outMin] = outTime.split(':');

    return ((parseInt(outHour) * 60) + parseInt(outMin)) - ((parseInt(inHour) * 60) + parseInt(inMin));
};

function solution(fees, records) {
    const [basicTime, basicFee, unitTime, unitFee] = fees;
    
    const map = new Map();
    
    records.map(record => {
        const [time, number, method] = record.split(' ');
        
        let info = map.get(number);
        if (!info) {
            info = { totalTime: 0 };
        }
        
        if (method === 'IN') {
            info.inTime = time;
            map.set(number, info);
            return;
        }
        
        info.totalTime += calculateTime(info.inTime, time);
        info.inTime = null;
        
        map.set(number, info);
    });
    
    return [...map.keys()].sort((k1, k2) => k1 - k2).map(key => {
        const info = map.get(key);
        
        if (info.inTime) {
            info.totalTime += calculateTime(info.inTime, '23:59');
        }
        
        let totalFee = 0;
        let totalTime = info.totalTime;
        
        totalFee += basicFee;
        totalTime -= basicTime;
        
        if (totalTime > 0) {
            totalFee += (Math.ceil(totalTime / unitTime) * unitFee);
        }
        
        return totalFee;
    });
}

0개의 댓글