programmers.co.kr/learn/courses/30/lessons/92341
주차 요금을 나타내는 정수 배열 fees, 자동차의 입/출차 내역을 나타내는 문자열 배열 records가 매개변수로 주어집니다. 차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수 배열에 담아서 return 하도록 solution 함수를 완성해주세요.
각 차의 주차 요금을 계산하는 구현 문제였습니다.
- returnTime(t1, t2): t1(str)과 t2(str)을 입력으로 받아 두 시간의 분 차이를 계산하는 함수
- calFee(base_time,base_fee, per_time, per_fee, ti): 문제에서 주어진 기본 시간(분), 기본 요금(원), 단위 시간(분), 단위 요금(원) 통해 ti(int)의 요금을 계산하는 함수
import math
from collections import defaultdict
def returnTime(t1, t2):
h1, m1 = t1.split(":")
h2, m2 = t2.split(":")
return 60 * (abs(int(h1) - int(h2))) - int(m1) + int(m2)
def calFee(base_time,base_fee, per_time, per_fee, ti):
if ti <= base_time:
return base_fee
return base_fee + per_fee * math.ceil((ti - base_time) / per_time)
def solution(fees, records):
base_time = fees[0]
base_fee = fees[1]
per_time = fees[2]
per_fee = fees[3]
time_dict = defaultdict(int)
is_in = defaultdict(str)
answer = []
for record in records:
ti, car_num, ord = record.split()
if ord == 'IN':
is_in[car_num] = ti
else:
time_dict[car_num] += returnTime(is_in[car_num], ti)
# 출차 표시
is_in[car_num] = '-1'
for car_num in sorted(is_in.keys()):
# 출차하지 못했을 경우
if is_in[car_num] != '-1':
time_dict[car_num] += returnTime(is_in[car_num], "23:59")
answer.append(calFee(base_time, base_fee, per_time, per_fee, time_dict[car_num]))
else:
answer.append(calFee(base_time, base_fee, per_time, per_fee, time_dict[car_num]))
return answer