본문 바로가기
Programming/Programmers

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

by 데이터현 2022. 1. 23.

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

 

코딩테스트 연습 - 주차 요금 계산

[180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000]

programmers.co.kr

주어진 조건대로 구현하면 되는 전형적인 구현 문제다 dict를 활용하여 풀었다.

00:00 입차하는 경우를 처리하기 위해 defaultdict를 -1로 초기화해줬다

 

나의 풀이

from collections import defaultdict
import math
def solution(fees, records):
    car_acc_time = defaultdict(int)
    car_time = defaultdict(lambda : -1)
    car_fee = {}

    for record in records:
        timer, num, action = record.split()
        hh,mm = map(int,timer.split(':'))
        if action == 'IN':
            car_time[num] = hh*60+mm
        else:
            car_acc_time[num] += (hh*60+mm - car_time[num])
            car_time[num] = -1

    basicTime, basicFee, unitTime, unitFee = fees

    for num in car_time.keys():
        if car_time[num] != -1:
            # 아직 출차가 안되어있다면
            car_acc_time[num] += (23*60+59 - car_time[num])
        if basicTime >= car_acc_time[num]:
            car_fee[num] = basicFee
        else:
            car_fee[num] = basicFee + math.ceil((car_acc_time[num] - basicTime)/unitTime)*unitFee

    answer = []
    for key,value in sorted(car_fee.items(), key = lambda x : x[0]):
        answer.append(value)
    return answer

댓글