PROGRAMMERS 주차 요금 계산

LONGNEW·2022년 8월 25일
0

BOJ

목록 보기
325/333

https://school.programmers.co.kr/learn/courses/30/lessons/92341

input :

  • fees의 길이 = 4
  • fees의 원소 형태 : [기본 시간(분), 기본 요금(원), 단위 시간(분), 단위 요금(원)]
  • 1 ≤ records의 길이 ≤ 1,000
  • records의 원소 형태 : ["시각 차량번호 내역"]

output :

  • 차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수 배열에 담아서 return

조건 :

  • 차량 입차된 후 출차내역이 없다면, 23:59에 출차된 것으로 간주
  • 차량별 누적 주차 시간을 계산하여 요금을 일괄로 정산
  • 누적 주차 시간이 기본 시간이하라면, 기본 요금을 청구
  • 누적 주차 시간이 기본 시간을 초과하면, 기본 요금 + 단위 요금 (초과한 시간에 대해)
  • 초과한 시간이 단위 시간으로 나누어 떨어지지 않으면, 올림합니다.

idea

해설

주의

import math

def solution(fees, records):
    enter, tot_min = dict(), dict()

    def_min, def_fee, unit_min, unit_fee = fees
    for item in records:
        time, num, behavior = item.split(" ")
        hour, min = map(int, time.split(":"))

        if num not in tot_min:
            tot_min[num] = 0

        if behavior == "IN":
            enter[num] = hour * 60 + min
        else:
            now = hour * 60 + min
            tot_min[num] += now - enter[num]
            del enter[num]

    for key in enter.keys():
        now = 23 * 60 + 59
        tot_min[key] += now - enter[key]

    temp_ans = []
    for key in tot_min.keys():
        total = tot_min[key]

        if def_min >= total:
            temp_ans.append((key, def_fee))
        else:
            times = math.ceil((total - def_min) / unit_min)
            temp_ans.append((key, def_fee + unit_fee * times))

    temp_ans.sort()
    ans = [fee for _, fee in temp_ans]

    return ans

0개의 댓글