Muscardinus

주차 요금 계산 본문

알고리즘 문제/[프로그래머스] Lv2

주차 요금 계산

Muscardinus 2022. 4. 1. 22:43
728x90

https://programmers.co.kr/learn/courses/30/lessons/92341

 

코딩테스트 연습 - 주차 요금 계산

[180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000]

programmers.co.kr

function solution(fees, records) {
    const answer = [];
    const carsInfo = {};
    for (let record of records) {
        const [time, carNum, _] = record.split(" ");
        carsInfo[carNum] = carsInfo[carNum] || [];
        carsInfo[carNum].push(time);
    }
    const cars = Object.keys(carsInfo).sort((a, b) => a - b);
    // 기본 시간, 기본 요금, 단위 시간, 단위 요금
    const [dT, dF, uT, uF] = fees;
    
    const calcInOutTime = (inTime, outTime = "23:59") => {
        const start = inTime.split(":");
        const end = outTime.split(":");
        const startDate = new Date(0, 0, 0, start[0], start[1], 0);
        const endDate = new Date(0, 0, 0, end[0], end[1], 0);
        const diff = endDate - startDate;
        const minutes = Math.floor(diff / 1000 / 60);
        return minutes;
    }
    
    for (let car of cars) {
        let totalTime = 0;
        const n = carsInfo[car].length;
        for (let i = 0; i < n; i += 2) {
            totalTime += calcInOutTime(carsInfo[car][i], carsInfo[car][i + 1]);
        }
        let fee = dF;
        if (totalTime > dT) {
            fee += (Math.ceil((totalTime - dT) / uT) * uF);
        }
        answer.push(fee);
    }
    return answer;
}
728x90

'알고리즘 문제 > [프로그래머스] Lv2' 카테고리의 다른 글

괄호 회전하기  (0) 2022.04.03
빛의 경로 사이클  (0) 2022.04.02
게임 맵 최단거리  (0) 2022.03.28
양궁대회  (0) 2022.03.27
순위검색  (0) 2022.02.02
Comments