🤔 문제
https://programmers.co.kr/learn/courses/30/lessons/92341
😀 풀이
주차 요금 계산 문제는 입차하는 차량과 출차하는 차량을 관리하는 dictionary, 각 차량의 주차 시간을 관리하는 dictionary 즉, 두 개의 dictionary를 만들어 풀이했습니다.
1. 입차하는 차량과 출차하는 차량은 parkingLot에서 관리합니다.
2. 각 차량의 주차 시간 관리는 parkRecord에서 관리합니다.
주요 로직은 아래와 같습니다.
1. 입차하는 경우 parkingLot에 차량 번호를 입차 시간과 함께 기록합니다.
2. 출차하는 경우 parkingLot에서 꺼내고 차량 번호와 함께 입차 시간을 parkRecord에 기록합니다.
3. 모든 record를 확인한 뒤에도 주차장에 차량이 있는 경우 23:59분에 출차한 것으로 취급하여 parkRecord를 갱신해줍니다.
4. 정답은 문제의 조건에 맞게 차량 번호순으로 정렬하고 각 차량의 주차 요금을 계산하여 만들어줍니다.
이때 시간 문자열을 분 단위로 변경하는 getTime 함수와 주차 시간이 주어지면 주차 요금을 계산하는 calcFee 함수를 정의하여 사용했습니다.
💻 풀이 코드는 아래와 같습니다.
from collections import defaultdict
from math import ceil
def getTime(time):
h, m = time.split(':')
return int(h) * 60 + int(m)
def calcFee(time, baseTime, baseFee, unitTime, unitFee):
extraTime = max(0, time - baseTime)
extraFee = ceil(extraTime / unitTime) * unitFee
return baseFee + extraFee
def solution(fees, records):
answer = []
parkRecord = defaultdict(int)
parkingLot = dict()
baseTime, baseFee, unitTime, unitFee = fees
for record in records:
time, carNumber, type = record.split(' ')
time = getTime(time)
if type == "IN":
parkingLot[carNumber] = time
else:
parkRecord[carNumber] += (time - parkingLot[carNumber])
del parkingLot[carNumber]
# 남은 차 처리
for carNumber in parkingLot:
parkRecord[carNumber] += (getTime("23:59") - parkingLot[carNumber])
for carNumber in parkRecord:
fee = calcFee(parkRecord[carNumber], baseTime, baseFee, unitTime, unitFee)
answer.append([carNumber, fee])
answer.sort()
answer = [x[1] for x in answer]
return answer
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [1차] 셔틀버스 - Python (0) | 2022.02.13 |
---|---|
[프로그래머스] k진수에서 소수 개수 구하기 - Python (0) | 2022.02.10 |
[프로그래머스] [3차] n진수 게임 - Python (0) | 2022.02.04 |
[프로그래머스] [3차] 파일명 정렬 - Python (0) | 2022.02.01 |
[프로그래머스] 보석 쇼핑 - Python (2) | 2022.01.29 |