|
| 1 | +from typing import List |
| 2 | +from collections import defaultdict |
| 3 | + |
| 4 | + |
| 5 | +def solution(fees: List[int], records: List[List]): |
| 6 | + gibon_time, gibon_fee, danwi_time, danwi_fee = fees |
| 7 | + |
| 8 | + dt = {} |
| 9 | + parking_time = defaultdict(int) |
| 10 | + answer = defaultdict(int) |
| 11 | + |
| 12 | + for item in records: |
| 13 | + time, plate, inout = item.split(' ') |
| 14 | + |
| 15 | + if inout == 'IN': |
| 16 | + dt[plate] = time |
| 17 | + elif inout == 'OUT': |
| 18 | + time_in = dt[plate] |
| 19 | + time_in = HH_MM(time_in) |
| 20 | + time_out = time |
| 21 | + time_out = HH_MM(time_out) |
| 22 | + parking_time[plate] += (time_out - time_in) |
| 23 | + del dt[plate] |
| 24 | + |
| 25 | + keys = list(dt.keys()) |
| 26 | + for plate in keys: |
| 27 | + time_in = dt[plate] |
| 28 | + time_in = HH_MM(time_in) |
| 29 | + time_out = '23:59' |
| 30 | + time_out = HH_MM(time_out) |
| 31 | + parking_time[plate] += (time_out - time_in) |
| 32 | + |
| 33 | + keys = list(parking_time.keys()) |
| 34 | + for plate in keys: |
| 35 | + parking_fee = calculate_parking_fee(parking_time[plate], gibon_time, gibon_fee, danwi_time, danwi_fee) |
| 36 | + answer[plate] += parking_fee |
| 37 | + |
| 38 | + # keys = list(dt.keys()) |
| 39 | + # for plate in keys: |
| 40 | + # time_in = dt[plate] |
| 41 | + # time_in = HH_MM(time_in) |
| 42 | + # time_out = '23:59' |
| 43 | + # time_out = HH_MM(time_out) |
| 44 | + # parking_time = time_out - time_in |
| 45 | + # |
| 46 | + # parking_fee = calculate_parking_fee(parking_time, gibon_time, gibon_fee, danwi_time, danwi_fee) |
| 47 | + # answer[plate] += parking_fee |
| 48 | + # del dt[plate] |
| 49 | + |
| 50 | + ans = [] |
| 51 | + for plate in answer.keys(): |
| 52 | + ans.append([plate, answer[plate]]) |
| 53 | + |
| 54 | + ans.sort(key=lambda x: x[0]) |
| 55 | + ans2 = list(map(lambda x: x[1], ans)) |
| 56 | + |
| 57 | + return ans2 |
| 58 | + |
| 59 | + |
| 60 | +def calculate_parking_fee(parking_time: int, gibon_time, gibon_fee, danwi_time, danwi_fee): |
| 61 | + parking_fee = 0 |
| 62 | + |
| 63 | + if parking_time > gibon_time: |
| 64 | + parking_time -= gibon_time |
| 65 | + parking_fee += gibon_fee |
| 66 | + |
| 67 | + quotient, remainder = divmod(parking_time, danwi_time) |
| 68 | + if remainder > 0: |
| 69 | + quotient += 1 |
| 70 | + |
| 71 | + parking_fee += (quotient * danwi_fee) |
| 72 | + else: |
| 73 | + parking_fee += gibon_fee |
| 74 | + |
| 75 | + return parking_fee |
| 76 | + |
| 77 | + |
| 78 | +def HH_MM(t: str): |
| 79 | + hour, minute = map(int, t.split(':')) |
| 80 | + return hour * 60 + minute |
0 commit comments