https://programmers.co.kr/learn/courses/30/lessons/92341
문제가 길어 문제를 읽고 이해한 후, 밑의 글을 읽으면 좋을거 같습니다.
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 r in records:
time, number, history = r.split()
number = int(number)
if number in dic:
dic[number].append([dateToMinutes(time), history])
else:
dic[number] = [[dateToMinutes(time), history]]
rList = list(dic.items())
rList.sort(key=lambda x : x[0])
for r in rList:
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
HH:MM
형식으로 주어진다. 계산을 쉽게 하기위해 dateToMinutes 함수를 통해 분 단위로 환산하여 반환해주었다.def dateToMinutes(date):
h, m = map(int, date.split(':'))
return h*60 + m
dic = dict()
for r in records:
time, number, history = r.split()
number = int(number)
if number in dic:
dic[number].append([dateToMinutes(time), history])
else:
dic[number] = [[dateToMinutes(time), history]]
차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수 배열에 담아서 return 하도록 solution 함수를 완성해주세요.
를 만족시키기 어려웠다. 따라서 문제 출력 조건 만족하기 위해 dictionary를 (key, value) 튜플 형태의 list로 변환 후, 차량번호 기준으로 sort()를 하였다.rList = list(dic.items())
rList.sort(key=lambda x : x[0])
→ 사실상 차량 번호는 문제를 풀기 위해 차량 번호에 따른 순서가 중요하지, 차량번호가 "0000"이든 "0"이든 상관 없기 때문에 string을 int로 변환하여 sort()를 했다.
for r in rList:
# 생략
...
if r[1][-1][1] == "IN":
t += dateToMinutes('23:59')