🔻Algorithm/Programmers

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

_니지 2024. 5. 9. 23:53

https://school.programmers.co.kr/learn/courses/30/lessons/92341

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

import math

def solution(fees, records):
    
    # 시간 -> 분으로 계산
    def cal_time(a, b):
        minute = 0
        in_hour, in_min = map(int, a.split(":"))
        out_hour, out_min =  map(int, b.split(":"))
        
        if out_min < in_min:
            out_hour -= 1
            out_min += 60
        
        minute += (out_hour-in_hour)*60 + (out_min-in_min)
        
        return minute
    
    
    
    
    # 변수 선언
    answer = []
    record_dict = {}
    time_dict = {}
    
    
    # record_dict 선언 후 차량 번호로 정렬
    for r in records:
        temp = r.split(" ")
        record_dict[temp[1]] = []
        
    for r in records:
        temp = r.split(" ")
        record_dict[temp[1]].append(temp[0])

    record_dict = dict(sorted(record_dict.items()))
    
    
    # 시간 -> 분으로 변경해서 time_dict로 선언
    for e in record_dict.keys():
        time = record_dict[e]
        time_dict[e] = 0
        
        if len(time) % 2:
            time.append('23:59')
        
        for i in range(0, len(time), 2):
            a, b = time[i], time[i+1]
            time_dict[e] += cal_time(a, b)


    
    # time_dict과 fees 이용해서 발생 요금 계산
    for e in time_dict.keys():
        minute = 0
        
        if time_dict[e] <= fees[0]:
            minute += fees[1]
        else:
            minute += fees[1] + (math.ceil((time_dict[e]-fees[0])/fees[2]) * fees[3])
        
        answer.append(minute)
    
    
    
    return answer
728x90
반응형