프로그래머스) 주차요금계산 JS풀이

Clear·2023년 3월 30일
0

출처

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

풀이

function solution(fees, records) {
    
    const obj = {}
    // [1]. 차량번호를 키값으로, 입출차 내역을 배열에 담아 밸류로 저장한다.
    for (record of records){
        let [time, num, inOut] = record.split(' ')
        time = time.split(':').map(v=>Number(v))
        const totalMin = time[0]*60 + time[1]
 
        if (obj[num]) obj[num] = [...obj[num], totalMin]
        else obj[num] = [totalMin]
    }
    
    // [2]. 저장된 obj를 순회하며, 총 주차시간을 계산하고, 총 요금을 계산한다.
    const maxV = 24*60 - 1
    for (key in obj){
        // [2-1]. 입출차 내역 담긴 배열을 순회하면서 총 주차시간 계산.
        const values = obj[key]
        let total = 0                   
        values.forEach((val, idx)=>{
            if (idx%2) return                // 짝수번째만 봄
            if (values[idx+1]) total += (values[idx+1]-val)
            else total += (maxV-val)
        })
        
        // [2-2]. 총 주차시간을 가지고, 총 요금을 계산
        const [freeTime, defaultFee, min, fee] = fees.map(v=>Number(v))
        const remain = total-freeTime 
        if (remain <=0){
            obj[key] = defaultFee
            continue
        } 
        const calcFee = Math.ceil(remain/min)*fee + defaultFee
        obj[key] = calcFee
    }
    
    // [3]. 객체를 배열로 바꿔서, 정렬하고 요금 출력
    let arr = Object.entries(obj)          // [[차번호, 총요금],[차번호, 총요금],[],[]]
    arr = arr.sort((a,b)=>a[0]-b[0]).map(v=>v[1])
    
    return arr;

0개의 댓글