치즈의 AI 녹이기

[코테 공부] 프로그래머스 주차 요금 계산 본문

인공지능 대학원생의 생활/동료 코드 따라잡기

[코테 공부] 프로그래머스 주차 요금 계산

개발자 치즈 2023. 4. 26. 20:52

다음과 같은 순서로 차례대로 함수를 정의하여 구현하였다. 

 

1. 입차 출차에 따라 시간 계산 

2. 계산된 시간에 대하여 요금 부여 

 

 

import math

def calcul_time(in_time, out_time):
    in_hour, in_min = int(in_time.split(":")[0]), int(in_time.split(":")[1])
    out_hour, out_min = int(out_time.split(":")[0]), int(out_time.split(":")[1])
    if out_min - in_min < 0: 
        sub_hour = out_hour-in_hour-1
        sub_min = out_min + 60 - in_min
    else:
        sub_hour = out_hour-in_hour
        sub_min = out_min - in_min

    return sub_hour*60 + sub_min

def calcul_pay(fees, num, total_time, pays):
    # fees: 기본 시간, 기본 요금, 단위 시간, 단위 요금 
    fee = 0
    if total_time <= fees[0]: #기본 요금만 계산 
        pays[num] = fees[1]
    else: #누적 시간 추가 계산 
        add_fee = math.ceil((total_time - fees[0])/fees[2]) * fees[3]
        pays[num] = fees[1] + add_fee

def solution(fees, records):
    cars = dict()
    pays = dict()
    #시간순으로 기록된 차들 하나씩 확인
    for record in records:
        check = record.split(" ")
        time, num, state = check[0], check[1], check[2]
        
        # 입차인 경우, 주차장 목록에 기록함. 
        if state == "IN":
            if num not in cars:
                cars[num] = [time, 0] 
            else:
                cars[num] = [time, cars[num][1]] 
            
        else: #"OUT"
            in_time, total_time = cars[num]
            #누적 주차 시간 계산 
            total_time += calcul_time(in_time, time)
            cars[num] = [None, total_time]
    # print(cars)
    #요금 정산 
    for num in cars.keys():
        if cars[num][0] is not None:
            cars[num][1] += calcul_time(cars[num][0], "23:59")
            
        calcul_pay(fees, num, cars[num][1], pays)
    answer = sorted(pays.items(), key=lambda item: item[0])
    output = [i[1] for i in answer] 

    return output