โ“  ๋ฌธ์ œ

 

๐Ÿ›Ž๏ธ  ์•„์ด๋””์–ด

1. ์ถœ์ฐจ ๊ธฐ๋ก์ด ์—†๋Š” ์ฐจ ๋ฒˆํ˜ธ๋ฅผ ์ฐพ๋Š”๋‹ค.
    a. ์ฃผ์ฐจ์žฅ์— ์ด๋ฏธ ์žˆ๋Š” ์ฐจ๋Ÿ‰(์ฐจ๋Ÿ‰๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™์€ ์ฐจ๋Ÿ‰)์ด ๋‹ค์‹œ ์ž…์ฐจ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž…์ถœ์ฐจ ๊ฐœ์ˆ˜๊ฐ€ ํ™€์ˆ˜๋ผ๋ฉด ์ถœ์ฐจ ๊ธฐ๋ก์ด ํ•œ ๊ฐœ ๋ถ€์กฑํ•œ ๊ฒƒ์ด๋‹ค.
    b. 23:39๋กœ ์ถœ์ฐจ ๊ธฐ๋ก์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

2. ์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ - ์‹œ๊ฐ„ - ๋‚ด์—ญ ์ˆœ์œผ๋กœ ์ •๋ ฌ์„ ํ•œ๋‹ค.
    a. ๋‚ด์—ญ ์ •๋ ฌ์„ ํ•˜๋ฉด ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ IN - OUT์ด ์ •๋ ฌ๋œ๋‹ค.

3. ์ฐจ๋Ÿ‰ ๋ณ„ ์ฃผ์ฐจ ๋ˆ„์  ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•œ๋‹ค.
    a. ์ถœ์ฐจ ์‹œ๊ฐ„์ธ ๊ฒฝ์šฐ ์•ž ์ธ๋ฑ์Šค์˜ ์‹œ๊ฐ„(์ž…์ฐจ)์˜ ์ฐจ์ด๋ฅผ ๊ตฌํ•ด์„œ ๋”ํ•ด์ค€๋‹ค.

4. ์ตœ์ข… ์š”๊ธˆ์„ ๊ตฌํ•ด์ค€๋‹ค.
    a. ์˜ฌ๋ฆผ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— math๋ฅผ ์ž„ํฌํŠธํ•ด์„œ ceil ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿ’ป  ํ’€์ด

import math
from collections import Counter

def solution(fees, records):
  default_time, default_fee, unit_time, unit_fee = fees

  # ์ฐจ ๋ฒˆํ˜ธ ๋ณ„ ์ž…์ถœ์ฐจ ๊ฐฏ์ˆ˜ ๊ณ„์‚ฐ
  car_numbers = dict(Counter(map(lambda x: x.split()[1], records)))

  # ์ถœ์ฐจ ๊ธฐ๋ก์ด ์—†๋Š” ๋ฒˆํ˜ธ๋Š” 23:59 ์ถ”๊ฐ€
  for car in car_numbers.items():
    if car[1] % 2 != 0:
      records.append(f'23:59 {car[0]} OUT')

  # ์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ, ์‹œ๊ฐ„, ๋‚ด์—ญ ์ˆœ์œผ๋กœ ์ •๋ ฌ
  records.sort(key=lambda x: (x.split()[1], x.split()[0], x.split()[2]))
  # ['06:00 0000 IN', '06:34 0000 OUT', '18:59 0000 IN', '23:59 0000 OUT', '07:59 0148 IN', '19:09 0148 OUT', '05:34 5961 IN', '07:59 5961 OUT', '22:59 5961 IN', '23:00 5961 OUT']

  # ์ฐจ๋Ÿ‰ ๋ณ„ ๋ˆ„์  ์‹œ๊ฐ„
  sum_time = {}
  for index, record in enumerate(records):
    time, car, history = record.split()

    # ์ถœ์ฐจ ์‹œ๊ฐ„์ธ ๊ฒฝ์šฐ
    if history == "OUT":
      # ์ž…์ฐจ ์‹œ๊ฐ„
      in_time = records[index - 1].split()[0]
      sub_hour = int(time.split(':')[0]) - int(in_time.split(':')[0])
      sub_minute = int(time.split(':')[1]) - int(in_time.split(':')[1])

      # ์‹ค์ œ ์ฃผ์ฐจ ์‹œ๊ฐ„
      sub_time = 60 * sub_hour + sub_minute

      if car in sum_time:
        sum_time[car] += sub_time
      else:
        sum_time[car] = sub_time

  answer = []
  for time in sum_time.values():
    # ์ตœ์ข… ์š”๊ธˆ
    if time <= default_time:
      answer.append(default_fee)
    else:
      answer.append(default_fee + math.ceil((time - default_time) / unit_time)  * unit_fee)

  return answer

print(solution([180, 5000, 10, 600], ["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"]))

 

+ Recent posts