[PRO] 주차 요금 계산

천호영·2022년 7월 7일
0

알고리즘

목록 보기
26/100
post-thumbnail

https://school.programmers.co.kr/learn/courses/30/lessons/92341?language=python3

from collections import defaultdict
import math

# hh:mm을 분 단위로 반환
def time_to_minute(time_hh_mm):
    hour, minute = time_hh_mm.split(":")
    return int(hour) * 60 + int(minute)


# 총 머문 시간(분) 반환
def find_total_dwell_minute(one_car_minutes):
    total_dwell_minute = 0
    
    if len(one_car_minutes) % 2 != 0: # 끝에 출차 없는 경우
        close_minute = time_to_minute("23:59")
        one_car_minutes.append(close_minute)
    
    for i in range(0, len(one_car_minutes), 2):
        total_dwell_minute += (one_car_minutes[i+1] - one_car_minutes[i])
        
    return total_dwell_minute


def fee_calculate(total_dwell_minute, fees):
    basic_time, basic_fee, unit_time, unit_fee = fees
    if total_dwell_minute <= basic_time:
        return basic_fee
    else:
        return basic_fee + math.ceil((total_dwell_minute - basic_time) / unit_time) * unit_fee
    
    
def solution(fees, records):
    answer = []
    
    car_number_key_dict = defaultdict(list)
    
    for record in records:
        time_hh_mm, car_number, event = record.split()
        car_entrance_minute = time_to_minute(time_hh_mm)
        car_number_key_dict[car_number].append(car_entrance_minute)  # 차 번호 단위로 묶기
    
    for _, one_car_minutes in sorted(car_number_key_dict.items()): # 차 번호 순 정렬
        total_dwell_minute = find_total_dwell_minute(one_car_minutes)
        answer.append(fee_calculate(total_dwell_minute, fees))
    
    return answer
profile
성장!

0개의 댓글