Algorithm

[카카오 코테 2022 | python] 주차 요금 계산

삐롱K 2025. 6. 24. 09:16
728x90
반응형

 

Q1) 문제를 어떻게 이해했나요?
A1)
입력 → fees: [기본 시간, 기본 요금, 단위 시간, 단위 요금],  records: "HH:MM 차량번호 IN/OUT" 형태의 리스트
출력 → 차량 번호 오름차순으로, 각각의 최종 주차 요금 리스트 반환

규칙 → 입차 후 출차 기록이 없으면 23:59에 출차된 것으로 간주, 누적 주차 시간 계산 후: 기본시간 이하면 기본요금, 초과시간은 단위시간으로 올림 계산하여 요금 부과
Q2) 문제를 어떻게 풀 예정인가요?
A2)
단계 1: 문자열을 분리해서 시각/차량번호/상태로 파싱
단계 2: 입차 시각은 저장하고, 출차 시 총 누적 시간을 저장
단계 3: 입차만 하고 출차 안 된 차량은 23:59 출차로 간주
단계 4: 차량 번호를 기준으로 정렬 후 요금 계산

 

from math import ceil
from collections import defaultdict

def time_to_minutes(t):
    h, m = map(int, t.split(":"))
    return h * 60 + m

def solution(fees, records):
    basic_time, basic_fee, unit_time, unit_fee = fees
    in_record = dict()
    total_time = defaultdict(int)

    for record in records:
        time, number, status = record.split()
        time = time_to_minutes(time)

        if status == "IN":
            in_record[number] = time
        else:  # "OUT"
            in_time = in_record.pop(number)
            total_time[number] += time - in_time

    # 출차 기록 없는 차량 처리
    for number, in_time in in_record.items():
        total_time[number] += time_to_minutes("23:59") - in_time

    result = []
    for number in sorted(total_time.keys()):
        t = total_time[number]
        if t <= basic_time:
            result.append(basic_fee)
        else:
            extra = ceil((t - basic_time) / unit_time)
            result.append(basic_fee + extra * unit_fee)

    return result
728x90
반응형