[프로그래머스] 주차 요금 계산 (Python 파이썬)

dh·2022년 10월 25일
0
post-thumbnail

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

문제 접근 방식

dictionary자료형을 이용해 번호판별로 시간, 시간의 누적합, 출입유형을 저장한다.
dict에 값이 없으면 처음에 값을 넣어준다.
출입이 out이면 dict에 있는 시간과 빼서 누적합을 갱신시킨다.
출입이 in이면 시간을 갱신시켜 다음에 out이 오면 누적합을 계산할 수 있도록한다.
누적합계산이 끝나고 결과에 출입이 in이면 23:59에서 시간을 빼서 누적합에 추가한다.
그리고 요금을 계산하고 키값에 따라 정렬 후 배열에 요금을 추가하여 리턴한다.

코드

from collections import *
import datetime
import math
def solution(fees, records):

    dict = defaultdict(list)
    result =[]

    for record in records:
        time, num, io = record.split()

        if not dict[num]:
            dict[num] =[time,0,io]

        if dict[num] and io=='OUT':
            interval = datetime.datetime.strptime(time, "%H:%M") - datetime.datetime.strptime(dict[num][0], "%H:%M")
            dict[num][1] += interval.seconds // 60
            dict[num][2]='OUT'

        elif dict[num] and io=='IN':
            dict[num][0] = time
            dict[num][2] = 'IN'

    for i in dict:

        if dict[i][2] == 'IN':
            interval = datetime.datetime.strptime('23:59', "%H:%M") - datetime.datetime.strptime(dict[i][0], "%H:%M")
            dict[i][1] += interval.seconds // 60
            dict[i][2] = 'OUT'
        if dict[i][1] <= fees[0]:
            fee = fees[1]
        else:
            fee = fees[1] + math.ceil((dict[i][1]-fees[0])/ fees[2]) * fees[3]

        dict[i][2]=fee

    sort_dict = sorted(dict.items())

    for i,v in enumerate(sort_dict):

        fee = sort_dict[i][1][2]
        result.append(fee)
    return result

0개의 댓글