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

JinUk Lee·2023년 2월 7일
0

프로그래머스

목록 보기
9/48

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


from datetime import datetime
import math

def solution(fees, records):
    answer = []
    park = [] # 주차중인 차 리스트
    real_rec = [] # records를 사용하기 편하게 변환함
    time_table = dict() # 주차된 차와 시간을 기록하는 딕셔너리
    score = dict() # 주차 요금을 기록하는 딕셔너리

    for rec in records:
        time,number,IO = rec.split()
        elem = (time,number,IO)
        real_rec.append(elem)

    for rec in real_rec:
        if rec[1] not in park and rec[2]=='IN':
            park.append(rec[1])
            time_table[rec[1]] = rec[0]
            ## 주차된 차가 아니면 park와 time_table에 넣어줌
        elif rec[1] in park:
            park.remove(rec[1])
            time_dif = datetime.strptime(rec[0],'%H:%M') - datetime.strptime(time_table[rec[1]],'%H:%M') # 주차 시간 계산
            time_dif = int(time_dif.seconds/60)
            # 출차할때는 park에서 제거해줌
            if rec[1] not in score:
                score[rec[1]] = time_dif
            else:
                score[rec[1]] += time_dif

    if len(park) != 0: # 출차 기록이 없는 차가 있는 경우를 처리해줌
        for t in park:
            time_dif = datetime.strptime('23:59','%H:%M') - datetime.strptime(time_table[t],'%H:%M')
            time_dif = int(time_dif.seconds/60)
            if t not in score:
                score[t] = time_dif
            else:
                score[t] += time_dif

    score_key = list(score.keys())
    score_key.sort()
    for i in score_key:
        if score[i] <= fees[0]:
            answer.append(fees[1])
        else:
            ans = fees[1] + math.ceil((score[i]-fees[0]) / fees[2]) * fees[3]
            answer.append(ans)

    return answer

자료 구조를 여러개 써서 복잡했지만 차분히 풀면 풀만했다.

시간 계산하는 방법이 생각이 안나서 구글링으로 datetime 모듈을 참고했다.

profile
개발자 지망생

0개의 댓글