코딩테스트/프로그래머스
[프로그래머스] Level 2 - 주차 요금 계산 (Python)
ye0nn
2022. 5. 24. 23:22
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
✅ Solution
- defaultdict을 이용하여 차량별로 입/출차 내역을 저장해둔다.
- 그리고 defaultdict, infos의 키를 확인하면서 주차 요금을 계산해준다.
- 만약 해당 키 값이 홀수라면 마지막 출차 기록이 없다는 의미로 23:59에 출차된 것으로 간주하여 계산한다.
- 만약 해당 키 값이 짝수라면 출차-입차 시간으로 계산한다.
- 차량 번호와 요금을 answer에 넣은 뒤, 차량 번호로 정렬하여 요금을 리턴한다.
✅ Code
import math
from collections import defaultdict
def solution(fees, records):
answer = []
infos = defaultdict(list)
for record in records:
time, number, history = record.split()
infos[number].append(time)
for key in infos.keys():
total = 0
for i in range(0, len(infos[key]), 2):
if i + 1 < len(infos[key]):
time = (int(infos[key][i + 1].split(":")[0]) * 60 + int(infos[key][i + 1].split(":")[1])) - (
int(infos[key][i].split(":")[0]) * 60 + int(infos[key][i].split(":")[1]))
total += time
else:
time = 1439 - (int(infos[key][i].split(":")[0]) * 60 + int(infos[key][i].split(":")[1]))
total += time
if total < fees[0]:
answer.append((key, fees[1]))
else:
fee = math.ceil((total - fees[0]) / fees[2]) * fees[3]
answer.append((key, fees[1] + fee))
answer = sorted(answer, key=lambda x: x[0])
return [x[1] for x in answer]