https://school.programmers.co.kr/learn/courses/30/lessons/92341
알고리즘 자체를 생각하는건 쉬웠으나.. 문자열 처리가 까다로운 문제였다.
먼저 딕셔너리에 {차량 번호: 시간(시:분 리스트)}으로 저장하고,
반복문을 통해 딕셔너리를 순회하면서 누적 주차 시간을 계산해줬다.
time 변수는 각 입차/출차에 대한 시간이고, total 변수는 누적 주차 시간이다.
time에 딕셔너리에 저장되어 있는 시간을 두개씩 짝지어서 시간을 계산해주고, 이를 total에 더했다.
짝지어진 시간이 없으면 마지막 시간에서 23:59까지 계산하여 total에 더했다.
모든 시간 계산이 끝나면 주차 요금을 계산하여 딕셔너리의 value 값을 바꿔준다.
마지막으로 딕셔너리를 key값으로 정렬해주고, value값만 모아서 출력해주면 된다.
# 프로그래머스 92341: 주차 요금 계산 (2022 KAKAO BLIND RECRUITMENT)
import math
def solution(fees, records):
car = []
dic = {}
for i in records: # 딕셔너리에 저장 {차량 번호: 시간}
j = i.split()
if j[1] in dic:
dic[j[1]].append(j[0])
else:
car.append(j[1])
dic[j[1]] = [j[0]]
for i in car:
time = -1
total = 0
for j in dic[i]: # 각 딕셔너리를 순회하면서 누적 주차 시간 계산
h = int(j.split(':')[0])
m = int(j.split(':')[1])
if time == -1:
time = h * 60 + m
else:
time = h * 60 + m - time
total += time
time = -1
if time != -1:
total += (23*60+59) - time
# 주차 요금 계산
if total > fees[0]:
dic[i] = fees[1] + math.ceil((total-fees[0]) / fees[2]) * fees[3]
else:
dic[i] = fees[1]
dic = sorted(dic.items()) # key값으로 정렬
answer = []
for i, j in dic:
answer.append(j)
return answer