코-딩/프로그래머스

프로그래머스::주차 요금 계산

힞뚜루마뚜루 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
댓글수0