PROGRAMMERS

[프로그래머스/파이썬] 주차 요금 계산

kode-daks 2025. 2. 3. 11:39

내 풀이

from math import ceil


def solution(fees, records):
    in_dict = {} # 차 번호 : 주차 시작 시간 (분단위)
    time_dict = {} # 차 번호 : 총 주차 시간 (분단위)
    basic_time, basic_fee, per_time, per_fee = fees
    
    # 시간을 분단위로 변환하는 함수
    def time_to_minute(time):
        h, m = map(int, time.split(":"))
        return h*60 + m
    
    # 총 시간을 요금으로 변환하는 함수
    def minute_to_fee(total_time):
        if total_time <= basic_time: return basic_fee
        else: return basic_fee + ceil((total_time - basic_time)/per_time)*per_fee
        
        
    for record in records:
        inout_time, car_num, in_out = record.split()
        
        # (1) 입차 : 주차 시작 시간을 분단위로 변환하여 in_dict에 저장
        if in_out == "IN":
            in_dict[car_num] = time_to_minute(inout_time)
            
        # (2) 출차 : 입차 시 저장된 주차 시작 시간으로 주차 시간 계산하여 time_dict에 저장
        elif in_out == "OUT":
            total_time = time_to_minute(inout_time) - in_dict[car_num]
            del in_dict[car_num] # 남아있는 차를 확인하기 위해 나간 차는 삭제
            # 이미 한 번 나갔다가 다시 들어온 차량일 경우 누적 시간으로 계산하기 위한 처리
            if time_dict.get(car_num): time_dict[car_num] += total_time
            else: time_dict[car_num] = total_time
    
    # (3) 입차만 하고 출차는 하지 않은 경우 23:59로 출차 처리
    for car_num, in_time in in_dict.items():
        total_time = time_to_minute("23:59") - in_time
        if time_dict.get(car_num): time_dict[car_num] += total_time
        else: time_dict[car_num] = total_time
    
    # 차 번호 순서대로 최종 요금 계산하여 반환
    return [minute_to_fee(total_time) for _, total_time in sorted(time_dict.items())]

 

메모

-