๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/92341
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
ํ์ด
# ํ๋ก๊ทธ๋๋จธ์ค 2๋จ๊ณ - ์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ
from collections import deque
import math
# fees: [๊ธฐ๋ณธ ์๊ฐ(๋ถ), ๊ธฐ๋ณธ ์๊ธ(์), ๋จ์ ์๊ฐ(๋ถ), ๋จ์ ์๊ธ(์)]
def get_fee(minutes, fees):
return fees[1] + math.ceil(max(0, (minutes - fees[0])) / fees[2]) * fees[3]
def solution(fees, records):
parking = dict()
stack = dict()
for record in records:
time, car, cmd = record.split()
hour, minute = time.split(":")
minutes = int(hour) * 60 + int(minute) # ์๊ฐ -> ๋ถ ํ์ฐ
if cmd == 'IN':
parking[car] = minutes
elif cmd == 'OUT':
try:
stack[car] += minutes - parking[car]
except:
stack[car] = minutes - parking[car]
del parking[car] # ์ถ์ฐจ ์ฐจ๋ ์ญ์
# ์ถ์ฐจ ๊ธฐ๋ก ์๋ ์ฐจ 23:59 ์ถ์ฐจ ์ฒ๋ฆฌ
for car, minute in parking.items():
try:
stack[car] += 23*60+59 - minute
except:
stack[car] = 23*60+59 - minute
return [get_fee(time, fees) for car, time in sorted(list(stack.items()), key=lambda x: x[0])]
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"]))