문제 설명
•
주차장에 들어온 차량들의 입출차 기록을 바탕으로 주차 요금을 계산하는 문제
◦
records의 원소들은 시각을 기준으로 오름차순으로 정렬
◦
차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수 배열에 담아서 return 하도록 solution 함수를 작성
예제 입력/출력
fees | records | result |
[180, 5000, 10, 600] | ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] | [14600, 34400, 5000] |
[120, 0, 60, 591] | ["16:00 3961 IN","16:00 0202 IN","18:00 3961 OUT","18:00 0202 OUT","23:58 3961 IN"] | [0, 591] |
[1, 461, 1, 10] | ["00:00 1234 IN"] | [14841] |
제약 조건
•
◦
records의 각 원소는 시각 차량번호 내역 형식의 문자열
◦
시각은 HH:MM 형식의 문자열로, 00:00부터 23:59까지 구성
◦
차량번호는 자동차를 구분하기 위한, `0'~'9'로 구성된 길이 4인 문자열
◦
내역은 IN(입차) 혹은 OUT(출차)
문제 풀이
•
브루트 포스 -
◦
문제에서 시키는 대로 구현하면 되는 단순 구현 문제에 해당
◦
접근 방법
1.
입출차 시간 기록
2.
주차 시간에 따른 요금 계산
3.
차량 번호 순으로 요금 출력
◦
필요 함수
transfer_time 함수
calculate_cost 함수
solution 함수
풀이 코드
from math import ceil
def transfer_time(time_str):
hour, minute = map(int, time_str.split(":"))
return hour * 60 + minute
def calculate_cost(minute, base_time, base_cost, unit_time, unit_cost):
if minute <= base_time:
return base_cost
else:
return base_cost + ceil((minute - base_time) / unit_time) * unit_cost
def solution(fees, records):
times = {}
last_time = transfer_time("23:59")
in_history = {}
for record in records:
time, car_number, record_type = record.split()
time = transfer_time(time)
if record_type == "IN":
in_history[car_number] = time
else:
in_time = in_history.pop(car_number)
times[car_number] = times.get(car_number, 0) + (time - in_time)
# 남은 IN 기록 처리
for car_number, in_time in in_history.items():
times[car_number] = times.get(car_number, 0) + (last_time - in_time)
# 차량 번호 순 정렬 후 요금 계산
return [
calculate_cost(minute, *fees)
for _, minute in sorted(times.items())
]
Python
복사