https://school.programmers.co.kr/learn/courses/30/lessons/92341?language=python3
from collections import defaultdict
import math
# hh:mm을 분 단위로 반환
def time_to_minute(time_hh_mm):
hour, minute = time_hh_mm.split(":")
return int(hour) * 60 + int(minute)
# 총 머문 시간(분) 반환
def find_total_dwell_minute(one_car_minutes):
total_dwell_minute = 0
if len(one_car_minutes) % 2 != 0: # 끝에 출차 없는 경우
close_minute = time_to_minute("23:59")
one_car_minutes.append(close_minute)
for i in range(0, len(one_car_minutes), 2):
total_dwell_minute += (one_car_minutes[i+1] - one_car_minutes[i])
return total_dwell_minute
def fee_calculate(total_dwell_minute, fees):
basic_time, basic_fee, unit_time, unit_fee = fees
if total_dwell_minute <= basic_time:
return basic_fee
else:
return basic_fee + math.ceil((total_dwell_minute - basic_time) / unit_time) * unit_fee
def solution(fees, records):
answer = []
car_number_key_dict = defaultdict(list)
for record in records:
time_hh_mm, car_number, event = record.split()
car_entrance_minute = time_to_minute(time_hh_mm)
car_number_key_dict[car_number].append(car_entrance_minute) # 차 번호 단위로 묶기
for _, one_car_minutes in sorted(car_number_key_dict.items()): # 차 번호 순 정렬
total_dwell_minute = find_total_dwell_minute(one_car_minutes)
answer.append(fee_calculate(total_dwell_minute, fees))
return answer