IN/OUT을 확인, 차량별 총 주차 시간을 구한 뒤, 번호가 낮은 순서대로 요금을 구한 뒤 그대로 return한다. 로직은 간단하지만 문자열을 가공하고 옮긴 뒤 조작하는 게 관건. 파이썬 3.0의 딕셔너리가 defaultdict인 까닭에 다른 어려움 없이 순서대로 in/out을 넣고 출력하면 된다. 만일 records 기록이 섞여 있다면 cars 딕셔너리의 car를 시간대로 sort한 뒤 사용하면 된다.
import math
def get_fee(fee, total):
if total <= fee[0]: return fee[1]
else:
return fee[1] + math.ceil((total - fee[0])/fee[2])*fee[3]
def solution(fee, records):
cars = {}
for record in records:
time, number, check = record.split()
info = cars.get(number)
if info:
info = info + [[time, check]]
else: info = [[time, check]]
cars[number] = info
result = []
for car in sorted(cars.keys()):
total = 0
time_in = 0
time_out = 0
for time, check in cars[car]:
if check == 'IN':
hour, min = time.split(':')
time_in = int(hour) * 60 + int(min)
else:
hour, min = time.split(':')
time_out = int(hour) * 60 + int(min)
total += time_out - time_in
if cars[car][-1][1] == 'IN':
total += 23*60 + 59 - time_in
result.append(get_fee(fee, total))
return result