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

주차요금계산
https://programmers.co.kr/learn/courses/30/lessons/92341


  • 단순 구현 + 파싱 문제

정답 코드

const solution = (fees, records) => {
    let answer = [];

    const isParking = {};   // 주차된 시간을 저장하는 Object
    const countingTimes = {};   // 총 주차시간을 저장하는 Object
    const MaxTime = 23*60 + 59;     // 가장 늦은 시간을 분으로 포맷
    const [standardTime, standardFee, unitTime, unitFee] = fees;
    
    // 1. 파싱 및 주차시간 저장 & 총 주차시간 저장
    records.forEach(el => {
        const [time, carNumber, parking] = el.split(' ');
        const [hour, minute] = time.split(':');
        const totalTime = hour*60 + minute*1;

        if (parking === 'IN') {
            // 입차가 되었다면 지금 시간 저장.
            isParking[carNumber] = totalTime;
            // 첫 입차라면 초기화
            if (!countingTimes[carNumber]) {
                countingTimes[carNumber] = 0;
            }
        } else {
            // 현재 출차 분과 저장되었던 입차 분의 차이를 총 주차시간에 저장.
            countingTimes[carNumber] += totalTime - isParking[carNumber];
            // 출차가 되었으면 -1로 저장.
            isParking[carNumber] = -1;
        }
    })
    // 2. 마지막까지 주차된 차량 파악
    for (const carNumber in isParking) {
        const prevParking = isParking[carNumber];
        if (prevParking !== -1) {
            countingTimes[carNumber] += MaxTime - prevParking;
        };
    }
    // 3. 차량번호를 정렬한 배열 생성
    const sortedCarNumberList = Object.keys(countingTimes).sort()

    // 4. 총 주차시간을 계산하여 요금 저장
    for (const carNumber of sortedCarNumberList) {
        const parkingTime = countingTimes[carNumber];
        // 만약 주차시간이 기준시간보다 작거나 같다면, 기준 요금만 지불
        if (parkingTime <= standardTime) {
            answer.push(standardFee);
        }
        // 만약 주차시간이 기준시간보다 크다면, 단위 시간에 요금까지 계산
        else {
            answer.push(Math.ceil((parkingTime - standardTime)/unitTime) * unitFee + standardFee);
        }
    }
    return answer;
}

좋은 웹페이지 즐겨찾기