programmers- lv.2 (주차 요금 계산)

이예송·2023년 8월 6일

PS

목록 보기
79/97

문제링크: 주차 요금 계산

✍🏻 Information

content
언어python
난이도⭐️⭐️
풀이시간54분
제출횟수2
인터넷검색유무yes




🍒 My Code

import math
def solution(fees, records):
    parking ={} #주차장에 있는 차들 저장
    time={} #각 차들이 몇분씩 있었는지 저장
    money={} #각 차들이 내야하는 요금 저장
    for r in records:
        _r = r.split()
        if _r[2]=="IN":
            parking[_r[1]]=_r[0]
        if _r[2]=="OUT":
            sub = (int(_r[0].split(":")[0])-int(parking[_r[1]].split(":")[0]))*60+int(_r[0].split(":")[1])-int(parking[_r[1]].split(":")[1])
            if _r[1] in time:
                time[_r[1]]+=sub
            else:
                time[_r[1]]=sub
            del parking[_r[1]] #출차하면 주차장에서 제거
    #dictionary에 남아있는 애들 23:59로 출차  
    for left_car,in_time in parking.items():
        sub = (23-int(in_time.split(":")[0]))*60+59-int(in_time.split(":")[1])
        if left_car in time:
            time[left_car]+=sub
        else:
            time[left_car]=sub
    #요금 계산      
    for car_num,sum_time in time.items():
        if sum_time<=fees[0]: #기본시간 이내
            money[car_num]=fees[1] #기본요금
        else: 
            money[car_num]=fees[1]+math.ceil((sum_time-fees[0])/fees[2])*fees[3]
    money = [i[1] for i in sorted(money.items())] #money의 key값을 기준으로 정렬해서 value값들만 뽑아냄
    return money




💡 What I learned

  • dictionary에 남아있는 출차하는 과정에서 if문에서 left_car가 아니라 위에것 복붙해서 쓰다가 _r[1]이라 써서 런타임 에러가 났었다. 이걸로도 꽤 시간 보냄,, 왜 test case에서는 오류가 안났는지,,

  • 딕셔너리에 키 있는지 확인: if some_key in dictionary_name (in 사용)

  • 딕셔너리 원소 삭제:
    1) del이용: del dic_name[삭제하고싶은_key이름]
    2) pop이용: dic_name.pop(삭제하고싶은_key이름)

  • 딕셔너리 키-값 출력:

for,in 딕셔너리.items():
     print(,)
  • 딕셔너리 정렬:
    1) key 오름차순 정렬: sorted(dic), sorted(dic.items())
    2) value 오름차순 정렬: sorted(dic.items(), key=operator.itemgetter(1)), sorted(dic.items(), key=lambda x: x[1])

  • 내림,올림: import math한 후 floor/trunc,ceil 사용

    • 반올림의 경우에는 import 필요없이 round함수 사용(사사오입원칙-반올림할 자리의 수가 5이면 반올림 할 때 앞자리의 숫자가 짝수면 내림하고 홀수면 올림)
    • trunc는 음수를 내림하면 0으로 향하는 반면 floor는 무조건 아래만 향한다.
math.trunc(-3.14)   #결과는 -3
math.floor(-3.14)   #결과는 -4

0개의 댓글