1 분 소요

사용 언어: Python3

문제

주차 요금 계산

풀이

내 풀이

import math

def calcPrice(minutes, fees): # ✅ 요금 계산
    price = 0
    dt, df, ut, uf = fees # default, util
    if minutes <= dt: # 기본 시간 이하
        price = df
    else: # 기본 시간 초과
        price += df
        minutes -= dt
        price += math.ceil(minutes/ut) * uf # ✅ 반올림
    return price

def dateToMinutes(date): # ✅ 시간을 분으로 변경
    h,m = map(int, date.split(':'))
    return h * 60 + m

def solution(fees, records):
    answer = []
    dic = dict()
    
    for x in records:
        time, number, history = x.split()
        if number in dic.keys():
            dic[number].append([time, history])
        else:
            dic[number] = [[time, history]]
        
    # 번호순 정렬
    new_dic = dict(sorted(dic.items(), key=lambda x:x[0])) # ✅ 딕셔너리 key 기준 정렬
    
    # ✅ 출차 내역이 없으면 23:59, OUT 추가
    for k, v in new_dic.items():
        if len(v) % 2 == 1: # 홀수개라면
            new_dic[k].append(['23:59', 'OUT'])
    
    # 주차 요금 계산
    for k, v in new_dic.items():
        tot_minutes = 0
        for i in range(1, len(v), 2): # ✅ 출차(OUT) 기록 순회
            # print(k,v[i])
            tot_minutes += dateToMinutes(v[i][0]) - dateToMinutes(v[i-1][0])
        answer.append(calcPrice(tot_minutes, fees))
            
    return answer
  • 성공!

다른 사람 풀이

import math
def dateToMinutes(date):
    h,m = map(int, date.split(':'))
    return h*60 + m

def solution(fees, records):
    answer = []
    dt, df, ut, uf = fees
    dic = dict()
    for x in records:
        time, number, history = x.split()
        number = int(number)
        
        if number in dic:
            dic[number].append([dateToMinutes(time), history])
        else:
            dic[number] = [[dateToMinutes(time), history]]
    
    recLst = list(dic.items())
    recLst.sort(key=lambda x:x[0])
    
    print(recLst)
    
    for r in recLst:
        t = 0
        for rr in r[1]:
            if rr[1] == 'IN':
                t -= rr[0]
            else:
                t += rr[0]
        if r[1][-1][1] == 'IN':
            t += dateToMinutes('23:59')
            
        if t <= dt:
            answer.append(df)
        else:
            answer.append(df + math.ceil((t-dt) / ut) * uf)
            
    return answer
  • 성공


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기