[Programmers] 주차 요금 계산
사용 언어: Python3
문제
풀이
내 풀이
import math
def calcPrice(minutes, fees): # ✅ 요금 계산
price = 0
dt, df, ut, uf = fees # default, util
if minutes <= dt: # 기본 시간 이하
price = df
else: # 기본 시간 초과
price += df
minutes -= dt
price += math.ceil(minutes/ut) * uf # ✅ 반올림
return price
def dateToMinutes(date): # ✅ 시간을 분으로 변경
h,m = map(int, date.split(':'))
return h * 60 + m
def solution(fees, records):
answer = []
dic = dict()
for x in records:
time, number, history = x.split()
if number in dic.keys():
dic[number].append([time, history])
else:
dic[number] = [[time, history]]
# 번호순 정렬
new_dic = dict(sorted(dic.items(), key=lambda x:x[0])) # ✅ 딕셔너리 key 기준 정렬
# ✅ 출차 내역이 없으면 23:59, OUT 추가
for k, v in new_dic.items():
if len(v) % 2 == 1: # 홀수개라면
new_dic[k].append(['23:59', 'OUT'])
# 주차 요금 계산
for k, v in new_dic.items():
tot_minutes = 0
for i in range(1, len(v), 2): # ✅ 출차(OUT) 기록 순회
# print(k,v[i])
tot_minutes += dateToMinutes(v[i][0]) - dateToMinutes(v[i-1][0])
answer.append(calcPrice(tot_minutes, fees))
return answer
- 성공!
다른 사람 풀이
import math
def dateToMinutes(date):
h,m = map(int, date.split(':'))
return h*60 + m
def solution(fees, records):
answer = []
dt, df, ut, uf = fees
dic = dict()
for x in records:
time, number, history = x.split()
number = int(number)
if number in dic:
dic[number].append([dateToMinutes(time), history])
else:
dic[number] = [[dateToMinutes(time), history]]
recLst = list(dic.items())
recLst.sort(key=lambda x:x[0])
print(recLst)
for r in recLst:
t = 0
for rr in r[1]:
if rr[1] == 'IN':
t -= rr[0]
else:
t += rr[0]
if r[1][-1][1] == 'IN':
t += dateToMinutes('23:59')
if t <= dt:
answer.append(df)
else:
answer.append(df + math.ceil((t-dt) / ut) * uf)
return answer
- 성공
💛 개인 공부 기록용 블로그입니다. 👻