2022 KAKAO BLIND RECRUITMENT - 주차 요금 계산 (파이썬) 문제 및 풀이

초코칩·2022년 11월 3일
0

카카오

목록 보기
5/12
post-thumbnail

문제

programmers.co.kr/learn/courses/30/lessons/92341
주차 요금을 나타내는 정수 배열 fees, 자동차의 입/출차 내역을 나타내는 문자열 배열 records가 매개변수로 주어집니다. 차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수 배열에 담아서 return 하도록 solution 함수를 완성해주세요.

풀이

각 차의 주차 요금을 계산하는 구현 문제였습니다.

  • returnTime(t1, t2): t1(str)과 t2(str)을 입력으로 받아 두 시간의 분 차이를 계산하는 함수
  • calFee(base_time,base_fee, per_time, per_fee, ti): 문제에서 주어진 기본 시간(분), 기본 요금(원), 단위 시간(분), 단위 요금(원) 통해 ti(int)의 요금을 계산하는 함수

코드

import math
from collections import defaultdict

def returnTime(t1, t2):
    h1, m1 = t1.split(":")
    h2, m2 = t2.split(":")
    return 60 * (abs(int(h1) - int(h2))) - int(m1) + int(m2)

def calFee(base_time,base_fee, per_time, per_fee, ti):
    if ti <= base_time:
        return base_fee

    return base_fee + per_fee * math.ceil((ti - base_time) / per_time)

def solution(fees, records):
    base_time = fees[0]
    base_fee = fees[1]
    per_time = fees[2]
    per_fee = fees[3]

    time_dict = defaultdict(int)
    is_in = defaultdict(str)
    answer = []

    for record in records:
        ti, car_num, ord = record.split()
        if ord == 'IN':
            is_in[car_num] = ti
        else:
            time_dict[car_num] += returnTime(is_in[car_num], ti)
            # 출차 표시
            is_in[car_num] = '-1'
	
    for car_num in sorted(is_in.keys()):
    	# 출차하지 못했을 경우
        if is_in[car_num] != '-1':
            time_dict[car_num] += returnTime(is_in[car_num], "23:59")
            answer.append(calFee(base_time, base_fee, per_time, per_fee, time_dict[car_num]))
        else:
            answer.append(calFee(base_time, base_fee, per_time, per_fee, time_dict[car_num]))

    return answer
profile
초코칩처럼 달콤한 코드를 짜자

0개의 댓글