PROGRAMMERS
[프로그래머스/파이썬] 주차 요금 계산
kode-daks
2025. 2. 3. 11:39
내 풀이
from math import ceil
def solution(fees, records):
in_dict = {} # 차 번호 : 주차 시작 시간 (분단위)
time_dict = {} # 차 번호 : 총 주차 시간 (분단위)
basic_time, basic_fee, per_time, per_fee = fees
# 시간을 분단위로 변환하는 함수
def time_to_minute(time):
h, m = map(int, time.split(":"))
return h*60 + m
# 총 시간을 요금으로 변환하는 함수
def minute_to_fee(total_time):
if total_time <= basic_time: return basic_fee
else: return basic_fee + ceil((total_time - basic_time)/per_time)*per_fee
for record in records:
inout_time, car_num, in_out = record.split()
# (1) 입차 : 주차 시작 시간을 분단위로 변환하여 in_dict에 저장
if in_out == "IN":
in_dict[car_num] = time_to_minute(inout_time)
# (2) 출차 : 입차 시 저장된 주차 시작 시간으로 주차 시간 계산하여 time_dict에 저장
elif in_out == "OUT":
total_time = time_to_minute(inout_time) - in_dict[car_num]
del in_dict[car_num] # 남아있는 차를 확인하기 위해 나간 차는 삭제
# 이미 한 번 나갔다가 다시 들어온 차량일 경우 누적 시간으로 계산하기 위한 처리
if time_dict.get(car_num): time_dict[car_num] += total_time
else: time_dict[car_num] = total_time
# (3) 입차만 하고 출차는 하지 않은 경우 23:59로 출차 처리
for car_num, in_time in in_dict.items():
total_time = time_to_minute("23:59") - in_time
if time_dict.get(car_num): time_dict[car_num] += total_time
else: time_dict[car_num] = total_time
# 차 번호 순서대로 최종 요금 계산하여 반환
return [minute_to_fee(total_time) for _, total_time in sorted(time_dict.items())]
메모
-