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

게으른 완벽주의자·2023년 1월 25일
0

프로그래머스

목록 보기
11/83
post-custom-banner

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

단위 시간/요금, 기본 시간/요금 등 고려해야 하는 변수들이 많아서 헷갈릴 뿐 이를 제외하면 일반적인 구현문제다
record의 길이가 1000 이하이기 때문에 이중 for문을 구현해도 괜찮은 문제였다

import math

def solution(fees, records):
    answer = []
    #기본 시간(분), 기본 요금, 단위 시간(분), 단위 요금
    min_time, min_cost, per_time, per_cost = fees
    
    #차 번호 별로 (시간, 분, 입차/출차 상태) 저장하기
    carState = {}
    for record in records:
        time, car, state = record.split()
        h, m = map(int, time.split(':'))
        if car not in carState:
            carState[car] = [(h,m,state)]
        else:
            carState[car].append((h,m,state))
    
    #마지막 상태가 출차가 아니라면 23시 59분에 출차한 상태로 저장하기
    for car in carState:
        if carState[car][-1][2] != 'OUT':
            carState[car].append((23,59,'OUT'))
    
    #차 번호 기준으로 오름차순으로 정렬
    carState = sorted(list(carState.items()))
    
    #차 번호 별로 주차 시간 저장
    carParking = {}
    for car, record in carState:
        time = 0
        for i in range(0, len(record)-1, 2):
            h1, m1, s1 = record[i]      #입차
            h2, m2, s2 = record[i+1]    #출차
            tmp = (h2*60 + m2) - (h1*60 + m1)
            time += tmp
        carParking[car] = time
    
    #차 번호 별로 주차 요금 정산
    #단위 시간으로 나누어 떨어지지 않으면 올림 하므로 math.ceil 사용
    for car in carParking:
        time = carParking[car]
        if time <= min_time:
            answer.append(min_cost)
        else:
            cost = min_cost + math.ceil((time-min_time)/per_time)*per_cost
            answer.append(cost)
            
    return answer
profile
데이터를 공부하고 있습니다
post-custom-banner

0개의 댓글