# math.ceil() -> 파이썬에서의 올림 함수
importmath# 누적 주차 시간(분) -> parking_m을 넣으면 주차 요금 리턴하는 함수
defcalculate_fee(parking_m,basic_t,basic_fee,unit_t,unit_fee):returnbasic_fee+math.ceil(max(0,parking_m-basic_t)/unit_t)*unit_feedefsolution(fees,records):answer=[]car_in={}car_out={}# 이 문제에서 시간은 모두 (분)으로 바꿀 거임
# 00:00부터 23:59까지의 시간(분)
max_m=24*60-1basic_t,basic_fee,unit_t,unit_fee=int(fees[0]),int(fees[1]),int(fees[2]),int(fees[3])forrecordinrecords:tmp_t,car_num,in_out=record.split()# 차량이 입차되거나 출차된 시각 -> (분)으로 저장
tmp_h,tmp_m=tmp_t.split(':')m=int(tmp_h)*60+int(tmp_m)# OUT일 경우에는 그 차량의 주차 시각 차이를 계산
ifin_out=='OUT':try:car_out[car_num]+=m-car_in[car_num]except:car_out[car_num]=m-car_in[car_num]delcar_in[car_num]else:# out 되면 삭제해주기
car_in[car_num]=m# 만약, value 값이 OUT인 차량이 있으면 그 key값을 찾고
# max_m을 이용하여 23:59분까지 출차된 걸로 계산하면 됨
forcar_num,mincar_in.items():try:car_out[car_num]+=max_m-mexcept:car_out[car_num]=max_m-manswer=[calculate_fee(m,basic_t,basic_fee,unit_t,unit_fee)forcar_num,minsorted(list(car_out.items()),key=lambdax:x[0])]returnanswer# result: [14600, 34400, 5000]
print(solution([180,5000,10,600],["05:34 5961 IN","06:00 0000 IN","06:34 0000 OUT","07:59 5961 OUT","07:59 0148 IN","18:59 0000 IN","19:09 0148 OUT","22:59 5961 IN","23:00 5961 OUT"]))
Leave a comment