FrontEnd/프로그래머스

[JS] 주차요금 계산

728x90

map자료형을 활용해서 구현해보았다.

 

현재들어와 있는 차량을 저장할 Map 자료형 하나와 출차한 차량을 저장할 Map자료형을 넣었다.

 

 

1. 차량이 In인 경우 in 자료형에 차량 입차시간 넣어주기.

2. 차량이 출차하는 경우 in 자료형에서 빼낸 이후, 출차 된 곳에 주차된 시간을 넣어주고 만약에 이전에 주차했던 차량이라면 누적시간을 더해준다. 

 

이때, 문제에서 들어갔을때마다 계산을 하는것이 아닌, 누적시간을 활용해서 주차시간을 계산하기 때문에 위처럼 해주어야 한다.

 

3. record를 다 순회한 다음, 입차된 차들은 모두 23:59까지 있었다고 계산을 해준다.

4. 출차된 차량의 자료형을 차량 번호대로 정렬해준 이후, 요금을 계산한다.

 

 

 

const hTom = (time) => {
    const [h,m] =time.split(":")
    return +h * 60 + +m
}

function solution([basicTime,basicFee,unitTime,unitFee], records) {
    const inMap = new Map()
    const outMap = new Map()
    
    for (const record of records){
        let [time,carNum,state] = record.split(" ")
        time = hTom(time)
        if (state === 'IN') inMap.set(carNum,time)
        else {
            if (outMap.has(carNum)) 
                outMap.set(carNum,outMap.get(carNum) + time-inMap.get(carNum))
            else outMap.set(carNum,time-inMap.get(carNum))
            inMap.delete(carNum)
        }
    }
    
    for (const [key,val] of inMap) {
        if (outMap.has(key)) 
                outMap.set(key,outMap.get(key) + hTom("23:59")-val)
        else outMap.set(key,hTom("23:59")-val)
    }
    
    const ary = [...outMap].sort((a,b) => +a[0]- +b[0])
    return ary.map(([carNum,time]) => {
        if (time <= basicTime) return basicFee
        return Math.ceil((time-basicTime)/unitTime) * unitFee + basicFee
    })
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 피로도  (0) 2023.06.08
[JS] K진수에서 소수 개수 구하기  (0) 2023.06.08
[JS] 양궁대회  (0) 2023.06.08
[JS] 두 큐 합 같게 만들기  (0) 2023.06.08
[JS] 혼자 놀기의 달인  (0) 2023.06.08