알고리즘

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

J3SUNG 2023. 2. 28. 01:10
728x90

2022 KAKAO BLIND RECRUITMENT

자동차가 주차된 시간과 나간 시간이 주어질 때 각 차량별 비용을 출력하는 문제입니다.

만약 나가는 시간이 주어지지 않는 경우 23:59에 나간 것으로 처리합니다.

차량 번호판은 최대 0000~9999까지 있으므로 10000크기의 배열들을 생성해주었습니다.
차량이 주차된 경우 해당 번호판으로 배열에 시간을 등록하고
나간 경우 들어온 시간과 나간 시간을 계산하여 머문 시간을 넣어주었습니다.

위의 과정을 모두 처리한 후 각 차량 별 머문 시간으로 주차요금을 계산해서 결과값을 찾았습니다.

function solution(fees, records) {
    let inCar = [];
    let outCar = [];
    let answer = [];
    for(let i=0; i<records.length; ++i){
        let arr = records[i].split(" ");
        let time = arr[0].split(":");
        let number = parseInt(arr[1]);
        let dir = arr[2];
        time = parseInt(time[0] * 60) + parseInt(time[1]);
        if(dir === "IN") {
            inCar[number] = time;
        } else if(dir === "OUT") {
            let calcTime = time - inCar[number];
            inCar[number] = -1;
            outCar[number] >= 0 ? outCar[number] += calcTime : outCar[number] = calcTime;
        }
    }
    for(let i=0; i<10000; ++i){
        if(inCar[i] >= 0){
            let calcTime = 1439 - inCar[i];
            outCar[i] >= 0 ? outCar[i] += calcTime : outCar[i] = calcTime;
        }
        if(outCar[i] >= 0){
            let fee = fees[1];
            if(outCar[i] - fees[0] > 0){
                fee += parseInt((outCar[i] - fees[0] + fees[2] - 1) / fees[2]) * fees[3];
            }
            answer.push(fee);
        }
    }
    return answer;
}