문제를 정리해보자.
주차장의 요금표와 차량의 입/출자 기록이 있다. 차량별로 주차요금을 계산하자.
기본시간 이하로 이용했다면, 기본요금만 지불한다.
기본시간을 초과했다면, 기본요금 + 추가요금을 지불한다.
기본시간(분) : 180분
기본요금(원) : 5000원
단위시간(분) : 10분
단위요금(원) : 600원
예) 5961
입차 : 5시 34분 (334)
출차 : 7시 59분 (479) = 145분
입차 : 22시 59분 (1379)
출차 : 23시 (1380) = 1분
5961 결과
146분 (기본시간 이하) : 5000원
예) 0000
입차 : 6시 00분 (360분)
출차 : 6시 34분 (394분) = 34분
입차 : 18시 59분 (1139분)
출차 : 23시 59분 (강제, 1439분) = 300분
(어떤 차량이 입차 된 후에 출차된 내역이 없다면, 23:59에 출차된 것으로 간주합니다.)
000 결과
334분 (기본시간 이상) : 334 - 180 = 154분
154분 : 10 * 16 : 600 * 16 = 9600
5000 + 9600 = 14600원
풀이를 생각해보자.
입/출차 시간은 모두 분으로 바꾸자. 그리고 출차 시간 - 입차 시간을 계산해서 누적시키자.
만약에 출차를 하지 않았다면 계산 값이 0 혹은 음수이다. 그럴 경우 23시 59분에 출차했다고 해주자.
구현해보자.
import math
def solution(fees, records):
default_t, default_c, unit_t, unit_c = fees[0], fees[1], fees[2], fees[3]
car_time = {} # 차량 번호 : 출차 시간 - 입차 시간
result = {} # 차량 번호 : 시간
# 입/출차
for li in records:
time, number, check = li.split()
time = int(time[0:2]) * 60 + int(time[3:5])
if check == "IN":
car_time[number] = -time
if not result.get(number, 0):
result[number] = 0
else: # OUT
car_time[number] = car_time[number] + time
result[number] += car_time[number] # 시간 누적
for key in result.keys():
# 강제 출차
if car_time[key] <= 0:
result[key] += (car_time[key] + 1439) # 23시 59분 나감
total_time = result[key]
# 기본 시간
if total_time <= default_t:
total_time = 0
else:
total_time -= default_t
# 단위 시간
cash = default_c
cash += math.ceil(total_time / unit_t) * unit_c
result[key] = cash # 차량 번호 : 요금
# 차량 번호가 작은 순으로 정렬
answer = [num[1] for num in sorted(result.items())]
return answer
solution([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"])
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][2022 KAKAO BLIND RECRUITMENT][Python] k진수에서 소수 개수 구하기 (2) | 2022.02.10 |
---|---|
[프로그래머스][2022 KAKAO BLIND RECRUITMENT][Python] 양과 늑대 (0) | 2022.02.07 |
[프로그래머스][2022 KAKAO BLIND RECRUITMENT][Python] 신고 결과 받기 (0) | 2022.01.25 |
[프로그래머스][Python] 가장 먼 노드 (1) | 2022.01.24 |
[프로그래머스][Python] 도둑질 (0) | 2022.01.18 |