본문 바로가기

PS/프로그래머스

[ 프로그래머스 LV 2 ] 주차 요금 계산 (파이썬 / python)

728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

주어진 조건을 보고 구현하는 단순구현문제

자료구조는 딕셔너리를 선호해서 딕셔너리를 사용했다.

 

 

import math


def solution(fees, records):
    answer = []
    # key : 차 번호, value : 입차 시간
    parking_zone = {}
    # key : 차 번호, value : 누적 주차 시간(분단위)
    parking_time_dic = {}

    default_time = int(fees[0])
    default_fee = int(fees[1])
    unit_time = int(fees[2])
    unit_fee = int(fees[3])

    for record in records:
        time, car, status = record.split(" ")

        if car not in parking_zone and status == "IN":
            parking_zone[car] = time

        elif car in parking_zone and status == "OUT":
            in_time = parking_zone[car]
            parking_time = parking_time_calculation(in_time, time)

            total_time = parking_time_dic.get(car, 0)
            parking_time_dic[car] = total_time + parking_time

            parking_zone.pop(car)

    for car in parking_zone.keys():
        parking_time = parking_time_calculation(parking_zone[car], "23:59")

        total_time = parking_time_dic.get(car, 0)
        parking_time_dic[car] = total_time + parking_time

    sorted_time_list = sorted(parking_time_dic.items())

    for time_tuple in sorted_time_list:
        total_parking_time = int(time_tuple[1])

        if total_parking_time <= default_time:
            answer.append(default_fee)
        else:
            answer.append(default_fee + unit_fee_calculation(unit_time, unit_fee, total_parking_time - default_time))

    return answer


# 주차 시간을 분 단위로 출력
def parking_time_calculation(in_time, out_time):
    in_hour, in_minute = in_time.split(":")
    out_hour, out_minute = out_time.split(":")

    return (int(out_hour) - int(in_hour)) * 60 + int(out_minute) - int(in_minute)


def unit_fee_calculation(unit_time, unit_fee, over_time):
    return math.ceil(over_time / unit_time) * unit_fee

 

 

 

 

728x90