[2022 Kakao Blind Recruitment] 주차요금계산

김아현·2023년 7월 17일
0

코딩테스트

목록 보기
17/26

자동차별 요금

  • 기본 요금 + ceil(기본 시간을 제외한 누적 주차 시간 / 10 ) * 단위 요금
  • 출차 내역이 없다면 출차 시간은 23:59
  • 요금은 00:00~23:59 일괄 계산

입력

  • fee[3] = [기본시간, 기본요금, 단위시간, 단위요금]

출력

청구 요금을 차량 번호가 작은 자동차부터 정렬한다.

제출코드

from math import ceil


#fees = [180, 5000, 10, 600]
#records = ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"]


def solution(fees, records):
     #init dict
    answer = {record.split()[1]:0 for record in records}
    d = {}
    base_t, base_f, unit_t, unit_f = fees

    # 출입 기록 딕셔너리 만들기
    # d가 남아있다면 출차하지 않은 것
    for record in records:
        t, c_num, io = record.split(' ')
        # IN/OUT 시간 기록
        if io =='IN':
            in_h, in_m = t.split(':')
            in_t = int(in_h) * 60 + int(in_m)
            d[c_num] = in_t # 출입시간
        elif io == 'OUT':
            out_h, out_m = t.split(':') 
            out_t = int(out_h) * 60 + int(out_m)
            result_t = int(out_t) - int(d[c_num])
            answer[c_num] += int(result_t)
            del d[c_num]

    # 차안뺀 거
    if d:
        for c in d:
            result_t = (23 * 60) + 59 - int(d[c])
            answer[c] += result_t 

    # 요금정산
    for key, val in answer.items():
        if val <= base_t:
            answer[key] = base_f
        else:
            answer[key] = (base_f + ceil((val-base_t)/unit_t) * unit_f)

    return list(map(lambda x : x[1], sorted(answer.items())))

결과

score +3
어려웠던 점은 완전 구현하는데 딕셔너리를 헷갈리지않고 바로바로 쓰지는 못했다는 점

profile
멘티를 넘어 멘토가 되는 그날까지 파이팅

0개의 댓글