코딩테스트

고난이도 구현 문제

임지혁코딩 2024. 4. 14. 12:46

import math
def solution(fees, records):

    timeleft = {}
    
    for i in records: 
        time,carnum,state = i.split()
        if carnum not in timeleft.keys() :
            timeleft[carnum] = fees[0]#기본 주차 가능 시간 
            
    parkinglot = []
    timeremember = {}
    for i in records:
        time,carnum,state = i.split()
        realtime = int(time[0:2])*60 + int(time[3:])
        
        if state == "IN" :
            parkinglot.append(carnum)
            timeremember[carnum] = realtime
        
        else :
            #나갈때가 되었어요 . 
            parkinglot.remove(carnum)
            howmanytime = realtime-timeremember[carnum] #시간 차이
            timeleft[carnum] -= howmanytime
            
    # print(parkinglot) #아직 안빠진 애가 있다?
    
    if len(parkinglot) >0 :
        for left in parkinglot :
            beforetime = timeremember[left] 
            timeleft[left] -= (1439 - beforetime ) # 다 정산 완료 #여기가좀이상.
            
    print(timeleft)
    
    paydict = {}      
        
    for i in timeleft:
        if timeleft[i] >= 0 :
            paydict[i] = fees[1]
        elif timeleft[i]< 0 :
            cost = fees[1]+ math.ceil((-timeleft[i])/fees[2])*fees[3]
            paydict[i] = cost
            
    new = sorted(paydict.items(),key= lambda x:x[0])
    
    answer = []
    
    for i in new :
        answer.append(i[1])
   
    return answer

 

거의 모든 부분을 혼자서 잘 풀었다. 

 

하지만 2가지 , 했었던 실수를 했다.

 

DICT는 , 그대로 정렬할 수 없다.

SORTED(DICT.ITEMS(),KEY= LAMBDA X : X[1])과 같이 변경하자. 

 

SQL과 달리, 올림(MATH.CEIL), 내림 (MATH.FLOOR)는 MATH를 IMPORT 해야 쓸 수 있다.