728x90
๐ ๋ฌธ์ ๋งํฌ
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ
[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"] [14600, 34400, 5000]
programmers.co.kr
๐ ๋ถ๋ฅ
๊ตฌํ
๐ก ํ์ด
๋์ ๋๋ฆฌ ์ฌ์ฉ๋ฒ์ด ์ต์ํ์ง ์์ ๊ณ ์ํ์ง๋ง ๋จ์ ๊ตฌํ ๋ฌธ์ ๋ก ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
์ ๊ทผ ๋ฐฉ์
- ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ์ฐจ๋ฒํธ ๋ณ๋ก ์ /์ถ์ฐจ ๊ธฐ๋ก์ ์ ์ฅํ๋ค.
- ์ /์ถ์ฐจ ์๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ํด ๋ถ ๋จ์๋ก ํ์ฐํ์ฌ ๋์ ๋๋ฆฌ์ ์ ์ฅํ๋ค.
- stack์ ์ด์ฉํด์ ์ด ์ฃผ์ฐจ ์๊ฐ์ ๊ณ์ฐํ๋ค.
- ๋ง์ง๋ง ์ถ์ฐจ ๊ธฐ๋ก์ด ์๋ค๋ฉด 23:59์ ์ถ์ฐจ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค๊ณ ๋์์๋ค.
- ๋ฐ๋ผ์ stack์ด ๋น์ด์์ง ์์ ๊ฒฝ์ฐ, LAST_EXIT_TIME์์ ๋นผ์ฃผ์ด ์ด ์ฃผ์ฐจ ์๊ฐ์ ๋ํด์ค๋ค.
๐ป ์ฝ๋
from math import ceil
LAST_EXIT_TIME = 1439
def hourToMinutes(time):
h, m = map(int, time.split(':'))
return h * 60 + m
def solution(fees, records):
answer = []
car = {}
dt, df, ut, uf = fees
for r in records:
time, number, op = r.split()
if number in car:
car[number].append((hourToMinutes(time), op))
else:
car[number] = [(hourToMinutes(time), op)]
car_list = list(car.items())
car_list.sort(key=lambda x: x[0])
for cars in car_list:
time = 0
stack = []
for car in cars[1]:
if car[1] == 'IN':
stack.append(car[0])
else:
time += car[0] - stack.pop()
if len(stack) != 0:
time += LAST_EXIT_TIME - stack.pop()
if time <= dt:
answer.append(df)
else:
answer.append(df + ceil((time - dt) / ut) * uf)
return answer
728x90