코딩테스트 연습 - 2022 KAKAO BLIND RECRUITMENT - 주차요금 계산



제한사항에 따라 동일한 차량이 또 입차하거나 없는 차량이 출차되는 경우, 입력 시각이 잘못된 경우 와 같이 잘못된 입력이 없으므로,
단순히 차량의 입차시 시간, 출차시 시간만을 계산하였다.
import math
def solution(fees, records):
def_time = fees[0]; def_fee = fees[1]; over_time = fees[2]; over_fee = fees[3]
table = {}
for r in records:
time, car_num, order = r.split() # 시간, 차량번호, 내역
h, m = map(int,time.split(':'))
t = (h*60) + m
if order == 'IN':
if car_num not in table:
table[car_num] = [t,0,True] # 입차시간,누적시간,입차여부
else:
table[car_num][0] = t # 입차시간
table[car_num][2] = True # 입차
elif order == 'OUT':
prev_t = table[car_num][0];
use_time = t - prev_t # 현재시간 - 입차시간
table[car_num][1] += use_time
table[car_num][2] = False # 출차
last_time = (23*60) + 59
# table 입차시간,누적시간,입차여부
for key, t in table.items():
if t[2] == True: # 종료까지 출차 안했을때
table[key][1] += last_time-t[0]
s_table = dict(sorted(table.items(),key=lambda x:x[0])) # 차량번호 기준 정렬
res = []
for t in s_table.values():
if t[1] <= def_time:
res.append(def_fee)
else:
fee = def_fee + math.ceil((t[1] - def_time) / over_time) * over_fee # 기본 요금 + 주차시간에 따른 요금
res.append(fee)
return res
이러한 문자열 처리 문제들이 코딩테스트 1번으로 자주 나오는데, 이런 문제의 경우 제한사항을 다른 문제보다 꼼꼼히 확인한 후 풀어야겠다 느꼈고, 코드가 가독성이 많이 떨어짐.. 해결 방법을 찾아봐야겠다.