주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다.
주차 요금을 나타내는 정수 배열 fees, 자동차의 입/출차 내역을 나타내는 문자열 배열 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] |
import math
def solution(fees, records):
basic_minute = fees[0]
basic_fee = fees[1]
minute = fees[2]
unit = fees[3]
car = list(set(map(lambda x: x.split()[1], records)))
total_fees = {k : 0 for k in car}
check = {}
for record in records:
tmp = record.split(' ')
if tmp[1] not in check.keys():
check[tmp[1]]= tmp[0]
else:
if tmp[-1] == 'OUT':
out_time = int(tmp[0].split(':')[0]) * 60 + int(tmp[0].split(':')[1])
in_time = int(check[tmp[1]].split(':')[0]) * 60 + int(check[tmp[1]].split(':')[1])
total_fees[tmp[1]] = total_fees[tmp[1]] + out_time - in_time
del check[tmp[1]]
if check:
for i in check.keys():
out_time = 1439
in_time = int(check[i].split(':')[0]) * 60 + int(check[i].split(':')[1])
total_fees[i] = total_fees[i] + out_time - in_time
result = []
for i in total_fees.items():
if i[1] <= basic_minute :
result.append((i[0], basic_fee))
else:
result.append((i[0], basic_fee + (math.ceil((i[1] - basic_minute) / minute) * unit)))
return list(map(lambda x: x[1], sorted(result)))
total_fees
딕셔너리를 만들어준다.['05:34', '5961', 'IN']
IN
한 것이기 때문에 tmp[1]을 key로 value는 tmp[0]으로 추가해준다.OUT
이기 때문에 시간의 차이를 total_fees
의 tmp[1]을 key로 하는 value 값을 기존의 값에다가 더해준다.total_fees[tmp[1]] = total_fees[tmp[1]] + out_time - in_time
total_fees
에 각각 차의 누적 주차 시간이 value로 담기게 된다.total_fees
의 value에 1439(23:59을 바꾼거
) - IN_time을 빼준 값을 더해준다.올해 나온 따근따근 문제라서 푼 사람들이 아직 많이 없는 것 같다.. 설명을 좀 더 친절하게 해보는 습관을 가져야할 것 같다!
출처: 프로그래머스
오류가 있으면 댓글 달아주세요🙂
설명 상당히 친절하세요. 도움이 많이됐습니다 감사합니다.