단위 시간/요금, 기본 시간/요금 등 고려해야 하는 변수들이 많아서 헷갈릴 뿐 이를 제외하면 일반적인 구현문제다
record의 길이가 1000 이하이기 때문에 이중 for문을 구현해도 괜찮은 문제였다
import math
def solution(fees, records):
answer = []
#기본 시간(분), 기본 요금, 단위 시간(분), 단위 요금
min_time, min_cost, per_time, per_cost = fees
#차 번호 별로 (시간, 분, 입차/출차 상태) 저장하기
carState = {}
for record in records:
time, car, state = record.split()
h, m = map(int, time.split(':'))
if car not in carState:
carState[car] = [(h,m,state)]
else:
carState[car].append((h,m,state))
#마지막 상태가 출차가 아니라면 23시 59분에 출차한 상태로 저장하기
for car in carState:
if carState[car][-1][2] != 'OUT':
carState[car].append((23,59,'OUT'))
#차 번호 기준으로 오름차순으로 정렬
carState = sorted(list(carState.items()))
#차 번호 별로 주차 시간 저장
carParking = {}
for car, record in carState:
time = 0
for i in range(0, len(record)-1, 2):
h1, m1, s1 = record[i] #입차
h2, m2, s2 = record[i+1] #출차
tmp = (h2*60 + m2) - (h1*60 + m1)
time += tmp
carParking[car] = time
#차 번호 별로 주차 요금 정산
#단위 시간으로 나누어 떨어지지 않으면 올림 하므로 math.ceil 사용
for car in carParking:
time = carParking[car]
if time <= min_time:
answer.append(min_cost)
else:
cost = min_cost + math.ceil((time-min_time)/per_time)*per_cost
answer.append(cost)
return answer