Search

PGS 주차 요금 계산

생성일
2024/10/16 03:29
태그
구현

문제 설명

주차장에 들어온 차량들의 입출차 기록을 바탕으로 주차 요금을 계산하는 문제
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]

제약 조건

1records1,0001 ≤ |records| ≤ 1,000
records의 각 원소는 시각 차량번호 내역 형식의 문자열
시각은 HH:MM 형식의 문자열로, 00:00부터 23:59까지 구성
차량번호는 자동차를 구분하기 위한, `0'~'9'로 구성된 길이 4인 문자열
내역은 IN(입차) 혹은 OUT(출차)

문제 풀이

브루트 포스 - O(records)O(|records|)
문제에서 시키는 대로 구현하면 되는 단순 구현 문제에 해당
접근 방법
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
복사