강신규

프로그래머스 주차 요금 계산 2022 KAKAO BLIND RECRUITMENT 본문

공부/코딩테스트준비

프로그래머스 주차 요금 계산 2022 KAKAO BLIND RECRUITMENT

kangnew 2022. 10. 27. 16:37

문제 설명 : 

 

주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다.

주차 요금을 나타내는 정수 배열 fees, 자동차의 입/출차 내역을 나타내는 문자열 배열 records 가 매개변수로 주어집니다. 차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수배열에 담아서 return 하도록 solution 함수를 완성해주세요

 

 

시간 요금 단위시간 단위요금을 fees로부터 각각 집어넣어준후 

records 안에있는 요소를 하나하나 split 하여 (time) (number) (IN or OUT) 판단 

차량번호가 딕셔너리에 존재하는지 아닌지 판단 존재하면은 IN 부터 OUT 까지 시간 저장

그후 딕셔너리에 존재하는 IN OUT 시간계산을 통하여 주차요금을 계산합니다.

 

import math

def hourToMinutes(hours):
    h, m = map(int , hours.split(":"))
    return h*60+m

def solution(fees, records):
    answer = []
    dic = dict()
    #기본시간, 기본요금, 단위시간, 단위요금
    dt, df, ut, uf = fees
    
    for r in records:
        time, number, InOut = r.split()
        # print(time,number,InOut)
        number = int(number)
        
        if number in dic:
            dic[number].append([hourToMinutes(time), InOut])
        else:
            dic[number] = [[hourToMinutes(time), InOut]]
    myList = sorted(dic.items())
    # print(myList)
    for r in myList:
        t=0
        print(r)
        
        for rr in r[1]:
            if(rr[1] == "IN"):
                t -= rr[0]
                
            elif(rr[1]=="OUT"):
                t += rr[0]
                
        if r[1][-1][1] =="IN":
            t += hourToMinutes("23:59")
            
        if t<= dt:
            answer.append(df)
        else:
            answer.append(df+math.ceil((t-dt)/ut)*uf)
            
    return answer