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

최동혁·2022년 12월 17일
0

프로그래머스

목록 보기
27/68

풀이 방법

  1. 차가 들어오고 나갈때마다 다른 defaultdict에 누적시간을 더해준다.
  2. 나감 처리를 안한 차가 있을수도 있으니, 나간 차는 dict에서 삭제한다.
  3. 모든 처리를 하고, 남아있는 차가 있으면 23:59분에 나감으로 시간을 누적시켜준다.
  4. 누적되어 있는 시간을 기준으로 기본 시간을 넘은 차는 기본요금으로, 넘지 않은 차는 기본 요금 + 분당 요금 계산을 해준다.

풀이 코드

import math
from collections import defaultdict

def solution(fees, records):
    answer = defaultdict(int)
    basic_time = int(fees[0])
    basic_money = int(fees[1])
    minute_per = int(fees[2])
    minute_per_money = int(fees[3])
    record = dict()
    
    for rec in records:
        time, car_num, flag = rec.split()
        if flag == "IN":
            record[car_num] = time
        else:
            in_hour, in_minute = record[car_num].split(":")
            out_hour, out_minute = time.split(":")
            total_min = (int(out_hour) * 60 + int(out_minute)) - (int(in_hour) * 60 + int(in_minute))
            answer[car_num] += total_min
            del record[car_num]

    if len(record):
        for car_num, time in record.items():
            hour, minute = time.split(":")
            total_min = 1439 - (int(hour) * 60 + int(minute))
            answer[car_num] += total_min

    answer = dict(sorted(answer.items()))
    result = []

    for total_min in answer.values():
        if total_min > basic_time:
            fee = basic_money + math.ceil((total_min - basic_time) / minute_per) * minute_per_money
            result.append(fee)
        else:
            result.append(basic_money)

    return result
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글