728x90
https://school.programmers.co.kr/learn/courses/30/lessons/92341
주어진 조건을 보고 구현하는 단순구현문제
자료구조는 딕셔너리를 선호해서 딕셔너리를 사용했다.
import math
def solution(fees, records):
answer = []
# key : 차 번호, value : 입차 시간
parking_zone = {}
# key : 차 번호, value : 누적 주차 시간(분단위)
parking_time_dic = {}
default_time = int(fees[0])
default_fee = int(fees[1])
unit_time = int(fees[2])
unit_fee = int(fees[3])
for record in records:
time, car, status = record.split(" ")
if car not in parking_zone and status == "IN":
parking_zone[car] = time
elif car in parking_zone and status == "OUT":
in_time = parking_zone[car]
parking_time = parking_time_calculation(in_time, time)
total_time = parking_time_dic.get(car, 0)
parking_time_dic[car] = total_time + parking_time
parking_zone.pop(car)
for car in parking_zone.keys():
parking_time = parking_time_calculation(parking_zone[car], "23:59")
total_time = parking_time_dic.get(car, 0)
parking_time_dic[car] = total_time + parking_time
sorted_time_list = sorted(parking_time_dic.items())
for time_tuple in sorted_time_list:
total_parking_time = int(time_tuple[1])
if total_parking_time <= default_time:
answer.append(default_fee)
else:
answer.append(default_fee + unit_fee_calculation(unit_time, unit_fee, total_parking_time - default_time))
return answer
# 주차 시간을 분 단위로 출력
def parking_time_calculation(in_time, out_time):
in_hour, in_minute = in_time.split(":")
out_hour, out_minute = out_time.split(":")
return (int(out_hour) - int(in_hour)) * 60 + int(out_minute) - int(in_minute)
def unit_fee_calculation(unit_time, unit_fee, over_time):
return math.ceil(over_time / unit_time) * unit_fee
728x90
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스 LV 2] 개인 정보 수집 유효기간 (파이썬 / python) (0) | 2023.01.20 |
---|---|
[프로그래머스 LV 3] 징검다리 건너기 (파이썬 / python ) (0) | 2022.10.18 |
[프로그래머스 LV 1] 성격 유형 검사하기 (파이썬/python) (0) | 2022.10.14 |
[프로그래머스 LV 2] k진수에서 소수 개수 구하기 (파이썬/p (0) | 2022.06.15 |
[프로그래머스 LV 3] 합승 택시요금 (파이썬/python) (0) | 2022.03.05 |