📖 2022 KAKAO BLIND RECRUITMENT > 주차 요금 계산

📖What I thought

  • 크게 2단계로 진행된다고 판단 (1. records 기록 정보를 내가 활용할 수 있는 데이터 구조로 변경 2. 해당 데이터로 요금을 계산)
  1. records 기록 정보를 내가 활용할 수 있는 데이터 구조로 변경” 단계에서 해야 할 일
    • 반복문 돌면서 기록 정보 문자열 쪼개서 내가 쓸 수 있는 변수로 둬
    • 입/출차 시간 정보를 모두 분 단위 값으로 환산
    • 누적 주차 정보 시간 갱신 (입차 시간: - 출차 시간: +)
  2. “해당 데이터로 요금을 계산” 단계에서 해야할 일
    • 기록되지 않은 23:59 출차 정보 존재 시 계산
    • 기본 요금 계산
    • 기본 요금 계산 후 남은 시간이 있다면 단위 시간으로 요금을 계산
  3. 출력 조건 맞추기
    • 얻은 최종 요금 정보들 차량 번호 작은 순으로 정렬
    • 최종 요금 정보만 리스트에 담아 출력

📖풀이

📎구현

from math import ceil
 
def solution(fees, records):
    basic_time, basic_fee, unit_time, unit_fee = fees # 요금표
    parking_lot = dict() # [key : value] = [차량 번호 : 누적 주차 시간]
    not_recorded = 23*60 + 59 # 출차 기록 X
    fee_info = [] # 청구 요금
    
    # record parking info
    for record in records:
        time, car_num, inout = record.split()
        
        # change time(h:m) to minute
        h, m = map(int, time.split(":"))
        time = -(h * 60 + m) if inout == "IN" else (h* 60 + m)
        
        parking_lot[car_num] = parking_lot.get(car_num, 0) + time
    
    # calculate fee
    for car, time in parking_lot.items():
        fee = 0
        
        # not recorded 23:59
        if time <= 0:
            time += not_recorded
        
        # calculate basic time & fee
        time = time - basic_time
        fee += basic_fee
        
        # calculate remaining fee
        if time > 0:
            fee += ceil(time/unit_time) * unit_fee
        
        fee_info.append((car, fee))
    
    # sort with the smallest car num
    fee_info = sorted(fee_info, key=lambda x: x[0])
    
    return [f for c, f in fee_info]

📖What I learned

  1. 올림 함수 : ceil(v) (from math import ceil) (아니면 import math해서 math.ceil(v))
  2. 예외처리를 잘하자 코테에선 테케가 많이 안 주어지니까 특수상황의 테케도 평소 생각해보는 습관을 길러야 할 듯!!!

⭐️기록되지 않은 23:59의 출차 처리

첫 생각

이전 입/출차 기록이 어떻든 마지막 출차 기록이 없다면(최종 출차가 없고 입차가 마지막 기록이라면) 누적 주차 시간이 마이너스 → 조건문을 누적 주차 시간이 마이너스이거나 입차 기록만 있는 상황(records의 길이가 1)일 때로 한정함

테케로 얻은 힌트

근데??? 입차 시간이00:00인 정보만 존재하는 테케에서 걸렸어 → 해당 조건문대로면 얜 기본 요금만 내고 나가 하루 웬종일 주차했는데 ;;; → 어떤 입/출차 기록을 가졌든 누적 주차 시간이 0일 수는 없어. 절.대.로. 그러니까? 굳이 다른 조건을 더 따지지 않아도 누적 주차 시간이 0보다 작으면 ??? 마지막 출차 정보가 없는 것

한 줄 요약 : 처음에는 최종 출차 정보가 없으면 <0이라고만 생각했는데 알고보니 0이였다

📖관련 지식

📎Dictionary

📎Permutation & Combination