본문 바로가기

TLI/코드카타

2024.06.28 TIL 코트카타 96번(주차 요금 계산)

    fun solution(fees: IntArray, records: Array<String>): IntArray {
        val carNumberToRecord = TreeMap<String, MutableList<String>>()
        for (record in records) {
            val splitRecord = record.split(" ")
            val parkingInfos = carNumberToRecord[splitRecord[1]]?: mutableListOf()
            parkingInfos.add(splitRecord[0])
            carNumberToRecord[splitRecord[1]] = parkingInfos
        }

        val sortedCarNumberToRecord = carNumberToRecord.toSortedMap()
        val answer = IntArray(carNumberToRecord.size)
        var answerIndex = 0
        for (carIter in sortedCarNumberToRecord) {
            val parkingTimes = carIter.value
            if (parkingTimes.size % 2 == 1)
                parkingTimes.add("23:59")

            var parkingTimesIndex = 0
            var totalUsingTime = 0
            var totalFee = 0
            while (parkingTimesIndex < parkingTimes.size) {
                val inTime = parkingTimes[parkingTimesIndex++].split(":")
                val outTime = parkingTimes[parkingTimesIndex++].split(":")
                val inTimeToMinutes = (inTime[0].toInt() * 60) + inTime[1].toInt()
                val outTimeToMinutes = (outTime[0].toInt() * 60) + outTime[1].toInt()

                totalUsingTime += outTimeToMinutes - inTimeToMinutes
            }

            if(totalUsingTime <= fees[0])
                totalFee = fees[1]
            else{
                totalUsingTime -= fees[0]
                totalFee += fees[1] + Math.ceil(totalUsingTime.toDouble() / fees[2]).toInt() * fees[3]
            }

            answer[answerIndex++] = totalFee
        }

        return answer
    }

 

풀이과정

1. records를 반복문을 돌면서 map(carNumberToRecord, key : 차량번호, value : List(입출입 시간들))에 추가한다.

2. map의 list를 2개씩(입차, 출차) 읽으면서  추가한다.(입력 값이 정렬되어 있기 때문에 순서대로 읽으면 된다.)

   2.1. 시:분 으로 주어진 시간을 분단위로 환산하고 입차 - 출자 시간으로 이용시간을 계산한다.

3. 문제에 주어진 계산 방법에 따라 이용요금을 계산한다.

 

포인트

- 입차, 출차시간이 이미 정렬되어 있기 때문에 List를 따로 정렬해서 계산할 필요가 없다.

- TreeMap을 사용했을 때 정렬 방식을 정의하지 않으면 key값으로 오름차순 정렬하기 때문에 답으로 쓰이는 배열에 순서대로 넣으면 된다.