import math #ceil함수를 용하기 위해 import
def solution(fees, records):
answer = []
dic={}
resultdic={}
basetime=fees[0]
basefee=fees[1]
unittime=fees[2]
unitfee=fees[3]
for record in records:
hour=record[:2]
minute=record[3:5]
carnum=record[6:10] #시간 분 차 번호 나눔.
if carnum not in resultdic:
resultdic[carnum]=0 # 차번호에 대한 초기값 0 설정
state=record[11:]
total=60*int(hour)+int(minute)
if carnum not in dic:
dic[carnum]=total # in인 경우 들어온 시간 입력
else:
add=total-dic[carnum] #out인 경우 out시간에서 in시간 뺌.
del(dic[carnum])
resultdic[carnum]+=add
pivot=1439 #출차 안된 차량은 1439(23시 59분에 출차한 것으로 간주)
for key,value in dic.items(): # dic에 남아있는 차량들은 아직 out 안한 차량들이므로 pivot시간에서 빼준만큼 더해준다.
time=pivot-value
resultdic[key]+=time
sdic=dict(sorted(resultdic.items()))
print(sdic)
for a in sdic.items():
if a[1]<basetime: #기본요금 차량
answer.append(basefee)
else:
answer.append(basefee + math.ceil((a[1]-basetime) / unittime) * unitfee) #추가요금 차량
return answer
궁금한 점
for a in sdic.items():
if a[1]<basetime: #기본요금 차량
answer.append(basefee)
else:
answer.append(basefee + math.ceil((a[1]-basetime) / unittime) * unitfee) #추가요금 차량
return answer
이 부분에서 a[1]으로 해놓긴 했는데 sdic의 value를 가져와서 대소를 비교하려하니 오류가 났다. 이유를 찾아야 할 것 같다.
!문제점에 대한 해결책 발견!
for value in sdic.values():
if value<basetime: #기본요금 차량
answer.append(basefee)
else:
answer.append(basefee + math.ceil((a[1]-basetime) / unittime) * unitfee) #추가요금 차량
return answer
이런식으로 value를 dic.values()를 통해 뽑아와야 한다. dic.items()를 통해 뽑아오면 key, value쌍이 모두 존재하기 때문에 if문에서 error가 나는 것이었다.