[프로그래머스] 주차 요금 계산

박신희·2022년 4월 25일
0

[풀이] 프로그래머스

목록 보기
18/33
post-thumbnail

❗ 풀이 과정

  • 입력값 records를 보고 주차장에 있던 시간 total_time 계산해주기
  • 주차장에 아직 남아있는 차는 따로 정산해주기 (23:59에 나간것으로)
  • total_time 딕셔너리를 car_num 오름차순으로 정렬해주기
  • 정렬해준 total_time 딕셔너리를 토대로 정산해주기

🤜 풀이 코드

from math import ceil

# 출차시간-입차시간 계산해서 분으로 반환
def get_time(start_time,end_time):
    s_hour,s_min=map(int,start_time.split(':'))
    e_hour,e_min=map(int,end_time.split(':'))
    if e_min<s_min:
        return e_min-s_min+60+(e_hour-s_hour-1)*60        
    else:
        return e_min-s_min+(e_hour-s_hour)*60

def solution(fees, records):
    total_time = dict()
    in_park= dict()
    in_time= dict()
    answer=[]
		
	# records에서 IN,OUT 판단해서 주차장에 있던 시간(total_time) 계산해주기
    for r in records:
        time,car_num,io = r.split()
        if io=='IN':
            in_park[car_num]=1
            in_time[car_num]=time
        else:
            in_park[car_num]=0
            total_time[car_num]=total_time.get(car_num,0)+get_time(in_time[car_num],time)
        
    # 출차 처리 안된것들 처리해주기
    for car_num,is_in in in_park.items():
        if is_in==1:
            total_time[car_num]=total_time.get(car_num,0)+get_time(in_time[car_num],'23:59')
    
		# 마지막 정산값 계산
    for i,time in sorted(total_time.items(),key=lambda x:x[0]):
        if time<=fees[0]:
            answer.append(fees[1])
        else:
            answer.append(fees[1]+ceil((time-fees[0])/fees[2])*fees[3])
    return answer
profile
log my moments 'u')/

0개의 댓글