문제링크: 주차 요금 계산
✍🏻 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 사용
math.trunc(-3.14) #결과는 -3
math.floor(-3.14) #결과는 -4