====== 주차 요금 계산 ====== ===== 풀이 ===== * 그냥 시키는대로 구현하면 되는 문제. * 자동차별로 주차 시간을 저장하는 것을 dict를 이용해서 처리하고, 자동차 번호순으로 출력하기 위해서 소팅을 사용했기 때문에 시간복잡도가 O(nlogn)이 되었다. 자동차 번호의 범위가 0000~9999 까지이므로 그냥 크기 10000짜리 배열을 이용해서 처리한다면 소팅없이 O(10000) 의 상수시간으로 주차 요금을 번호순으로 출력하는 것도 가능하다. ===== 코드 ===== """Solution code for "Programmers 92341. 주차 요금 계산". - Problem link: https://programmers.co.kr/learn/courses/30/lessons/92341 - Solution link: http://www.teferi.net/ps/problems/programmers/92341 """ import collections import math def solution(fees, records): enter_time = {} park_time = collections.defaultdict(int) for record in records: time_str, car, _ = record.split() hh, mm = [int(x) for x in time_str.split(':')] time_in_minute = hh * 60 + mm if (t := enter_time.get(car)) is None: enter_time[car] = time_in_minute else: park_time[car] += time_in_minute - t del enter_time[car] for car, t in enter_time.items(): park_time[car] += 23 * 60 + 59 - t base_time, base_fee, unit_time, unit_fee = fees answer = [] for _, t in sorted(park_time.items()): if t <= base_time: fee = base_fee else: fee = base_fee + math.ceil((t - base_time) / unit_time) * unit_fee answer.append(fee) return answer {{tag>프로그래머스 ps:problems:programmers:Level_2}}