코-딩/프로그래머스
프로그래머스::주차 요금 계산
힞뚜루마뚜루
2023. 1. 30. 22:00
728x90
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/92341
난이도 : Lv.2
풀이
from collections import defaultdict
import math
def solution(fees, records):
answer = []
inDict = dict()
outDict = defaultdict(int)
for re in records:
time, carNo, div = re.split(" ")
mTime = int(time.split(":")[0])*60 + int(time.split(":")[1]) # 분 환산
if(div == "IN"):
inDict[carNo] = mTime
elif(div == "OUT"):
outDict[carNo] += mTime - inDict[carNo]
del inDict[carNo] # 출차한 차 삭제
# 남아있는 차량
for remainCar, time in inDict.items():
outDict[remainCar] += 23*60 + 59 - time
# 요금 정산
for carNo, time in sorted(outDict.items()):
temp = fees[1] + math.ceil(max(time - fees[0], 0) / fees[2]) * fees[3]
answer.append(temp)
return answer
기록된 시간을 분으로 환산하여,
inDict에는 입차했을 때의 시간, outDict에는 입차한 시간을 빼서 저장한다.
출차한 차가 또 입차할 수 있으므로 한번 출차하면 dictionary에서 삭제한다.
inDict에 남아있는 차량을 찾아 계산후 차량 기록에 또 더해준다.
최종적으로 차량을 사전순으로 정렬하여 입력된 fees 배열에 나와있는 대로 요금 정산을 해주면 된다.
++ outDict만 특별히 defaultdict() 로 초기화한 이유는 outDict에 key값이 없으면 + 연산에서 오류가 발생하기 때문!
int는 모든 value가 0으로 초기화된다.
++ 다른 사람의 풀이를 보니 lambda를 많이 사용했던데, 난 거기까지 알면 기존의 알던 것도 못쓰기 때문에 그냥 이정도에서 만족ㅎㅎㅎㅎ
728x90