기본 요금 + ceil(기본 시간을 제외한 누적 주차 시간 / 10 ) * 단위 요금
청구 요금을 차량 번호가 작은 자동차부터 정렬한다.
from math import ceil
#fees = [180, 5000, 10, 600]
#records = ["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"]
def solution(fees, records):
#init dict
answer = {record.split()[1]:0 for record in records}
d = {}
base_t, base_f, unit_t, unit_f = fees
# 출입 기록 딕셔너리 만들기
# d가 남아있다면 출차하지 않은 것
for record in records:
t, c_num, io = record.split(' ')
# IN/OUT 시간 기록
if io =='IN':
in_h, in_m = t.split(':')
in_t = int(in_h) * 60 + int(in_m)
d[c_num] = in_t # 출입시간
elif io == 'OUT':
out_h, out_m = t.split(':')
out_t = int(out_h) * 60 + int(out_m)
result_t = int(out_t) - int(d[c_num])
answer[c_num] += int(result_t)
del d[c_num]
# 차안뺀 거
if d:
for c in d:
result_t = (23 * 60) + 59 - int(d[c])
answer[c] += result_t
# 요금정산
for key, val in answer.items():
if val <= base_t:
answer[key] = base_f
else:
answer[key] = (base_f + ceil((val-base_t)/unit_t) * unit_f)
return list(map(lambda x : x[1], sorted(answer.items())))
score +3
어려웠던 점은 완전 구현하는데 딕셔너리를 헷갈리지않고 바로바로 쓰지는 못했다는 점