Programmers - 주차 요금 계산

SJ0000·2022년 6월 6일
0

문제 링크

하루동안의 총 이용시간을 구하고 요금을 계산한다.
마지막까지 나가지 않았으면 23:59에 자동 출차시킨다.

def solution(fees, records):
    [basic_minutes, basic_fee, unit_minutes, unit_fee] = list(map(int, fees))

    parking_lot = dict()
    car_in_minutes = dict()

    def calculate_fee(minutes):
        if minutes <= basic_minutes:
            return basic_fee

        unit = 0
        if (minutes-basic_minutes) % unit_minutes == 0:
            unit = (minutes-basic_minutes)//unit_minutes
        else:
            unit = ((minutes-basic_minutes)//unit_minutes)+1

        return basic_fee + unit * unit_fee

    def time_to_minutes(time):
        [hour, minutes] = list(map(int, time.split(":")))
        return hour*60 + minutes

    def process(record):
        print(record)
        [time, car_number, status] = record.split(" ")
        minutes = time_to_minutes(time)
        if status == "IN":
            in_process(car_number, minutes)
        else:
            out_process(car_number, minutes)

    def in_process(car_number, in_minutes):
        parking_lot[car_number] = in_minutes

    def out_process(car_number, out_minutes):
        in_minutes = parking_lot[car_number]
        diff = out_minutes - in_minutes
        if car_in_minutes.get(car_number) == None:
            car_in_minutes[car_number] = diff
        else:
            car_in_minutes[car_number] += diff
        parking_lot.pop(car_number)

    for record in records:
        process(record)

    last_time = time_to_minutes("23:59")
    for car in list(parking_lot.keys()):
        print("23:59", car, "OUT")
        out_process(car, last_time)

    answer = []
    for car in list(car_in_minutes.keys()):
        total_minutes = car_in_minutes[car]
        total_price = calculate_fee(total_minutes)
        answer.append((car, total_price))

    answer = sorted(answer)
    return list(map(lambda x: x[1], answer))
profile
잘하고싶은사람

0개의 댓글