Programmers Code/Level 2

[Programmers] level2 - 주차 요금 계산 (Python) : 2022 KAKAO BLIND RECRUITMENT

NIMHO 2022. 9. 1. 13:15
728x90

▶주차 요금 계산 - 2022 KAKAO BLIND RECRUITMENT (level 2)

문제

주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다.

  • 어떤 차량이 입차 된 후에 출차된 내역이 없다면, 23:59에 출차된 것으로 간주합니다.
    • 0000번 차량은 18:59에 입차 된 이후, 출차된 내역이 없습니다. 따라서, 23:59에 출차된 것으로 간주합니다.
  • 00:00부터 23:59까지의 입/출차 내역을 바탕으로 차량별 누적 주차 시간을 계산하여 요금을 일괄로 정산합니다.
  • 누적 주차 시간이 기본 시간 이하라면, 기본요금을 청구합니다.
  • 누적 주차 시간이 기본 시간을 초과하면, 기본요금에 더해서, 초과한 시간에 대해서 단위 시간마다 단위 요금을 청구합니다.
    • 초과한 시간이 단위 시간으로 나누어 떨어지지 않으면, 올림 합니다.
    • ⌈a⌉ : a보다 작지 않은 최소의 정수를 의미합니다. 즉, 올림을 의미합니다.

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

728x90

풀이

첫 번째 for문에서 in, out을 판단해 in이면 car에 분당으로 계산해 언제 주차되었는지 넣어준다.

out이 나온다면, 주차된 car를 꺼내서 지금 시간과 빼준 후 총 주차 시간을 times라는 dictionary에 넣어준다.

이때 차가 나갔기 때문에 car에서 빼 주어야 하기 때문에

del(car[number])를 해주어서 dictionary에서 빼줍니다. (key값을 제거)

 

다음 for문에서는 23:59가 되어서 빼지 않은 차를 처리해주어야 합니다.

car에 이미 들어가 있기 때문에 key, val를 가져옵니다.

23 * 60 + 59에서 val(주차된 시간의 minute)를 빼주면 누적시간이 나옵니다.

이 값 또한 times에 추가해주면 됩니다.

 

다음 for문은 주차 시간에 맞는 금액을 처리해주는 for문입니다.

 

세 가지의 for문을 처리한 후에, 차 번호를 기준으로 정렬해주고,

answer에 해당하는 금액을 차례대로 넣어주면 됩니다.

import math

def solution(fees, records):
    answer = []
    times = {}
    car = {}
    for re in records:
        time, number, io = re.split()
        hour, minute = time.split(':')
        minutes = int(hour) * 60 + int(minute)
        if io == "IN":
            car[number] = minutes
        elif io == "OUT":
            time = minutes - car[number]
            if number in times:
                times[number] += time
            else:
                times[number] = time
            del(car[number])
    for key, val in car.items():
        time = 23*60 + 59 - val
        if key in times:
            times[key] += time
        else:
            times[key] = time
    for key, val in times.items():
        time = max(0, val - fees[0])
        money = fees[1] + math.ceil(time/fees[2]) * fees[3]
        times[key] = money
    times = sorted(times.items())
    for key, val in times:
        answer.append(val)
    return answer

 

728x90