728x90
▶주차 요금 계산 - 2022 KAKAO BLIND RECRUITMENT (level 2)
▶문제
주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다.
- 어떤 차량이 입차 된 후에 출차된 내역이 없다면, 23:59에 출차된 것으로 간주합니다.
- 0000번 차량은 18:59에 입차 된 이후, 출차된 내역이 없습니다. 따라서, 23:59에 출차된 것으로 간주합니다.
- 00:00부터 23:59까지의 입/출차 내역을 바탕으로 차량별 누적 주차 시간을 계산하여 요금을 일괄로 정산합니다.
- 누적 주차 시간이 기본 시간 이하라면, 기본요금을 청구합니다.
- 누적 주차 시간이 기본 시간을 초과하면, 기본요금에 더해서, 초과한 시간에 대해서 단위 시간마다 단위 요금을 청구합니다.
- 초과한 시간이 단위 시간으로 나누어 떨어지지 않으면, 올림 합니다.
- ⌈a⌉ : a보다 작지 않은 최소의 정수를 의미합니다. 즉, 올림을 의미합니다.
주차 요금을 나타내는 정수 배열 fees, 자동차의 입/출차 내역을 나타내는 문자열 배열 records가 매개변수로 주어집니다. 차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수 배열에 담아서 return 하도록 solution 함수를 완성해주세요.
728x90
▶풀이
첫 번째 for문에서 in, out을 판단해 in이면 car에 분당으로 계산해 언제 주차되었는지 넣어준다.
out이 나온다면, 주차된 car를 꺼내서 지금 시간과 빼준 후 총 주차 시간을 times라는 dictionary에 넣어준다.
이때 차가 나갔기 때문에 car에서 빼 주어야 하기 때문에
del(car[number])를 해주어서 dictionary에서 빼줍니다. (key값을 제거)
다음 for문에서는 23:59가 되어서 빼지 않은 차를 처리해주어야 합니다.
car에 이미 들어가 있기 때문에 key, val를 가져옵니다.
23 * 60 + 59에서 val(주차된 시간의 minute)를 빼주면 누적시간이 나옵니다.
이 값 또한 times에 추가해주면 됩니다.
다음 for문은 주차 시간에 맞는 금액을 처리해주는 for문입니다.
세 가지의 for문을 처리한 후에, 차 번호를 기준으로 정렬해주고,
answer에 해당하는 금액을 차례대로 넣어주면 됩니다.
import math
def solution(fees, records):
answer = []
times = {}
car = {}
for re in records:
time, number, io = re.split()
hour, minute = time.split(':')
minutes = int(hour) * 60 + int(minute)
if io == "IN":
car[number] = minutes
elif io == "OUT":
time = minutes - car[number]
if number in times:
times[number] += time
else:
times[number] = time
del(car[number])
for key, val in car.items():
time = 23*60 + 59 - val
if key in times:
times[key] += time
else:
times[key] = time
for key, val in times.items():
time = max(0, val - fees[0])
money = fees[1] + math.ceil(time/fees[2]) * fees[3]
times[key] = money
times = sorted(times.items())
for key, val in times:
answer.append(val)
return answer
728x90