[Programmers] 주차 요금 계산

Seon_shine·2022년 1월 21일
0

programmers

목록 보기
4/4
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가 나는 것이었다.

profile
모든 생각을 구현해내기 위해 노력하는 개발자

0개의 댓글