https://school.programmers.co.kr/learn/courses/30/lessons/176962
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
์ฒ์์ ๋ช๋ช ํ ์ผ๋ฅผ ํต๊ณผํ์ง ๋ชปํ๋๋ฐ,
๋๋ด์ง ๋ชปํ ๊ณผ์ ๋ฅผ ํ์ ๋ค์ ๋ฃ์๋ cur_time์ ์ ๋ฐ์ดํธํด์ฃผ์ง ์๊ณ ๋ฃ์๊ธฐ ๋๋ฌธ์ ์๊ฐ๊ณ์ฐ์ด ์ด์ํ๊ฒ ๋์ด์์๋ค.
๋, ํ๋ค ๋ชปํ ๊ณผ์ ๊ฐ ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ, ๊บผ๋ด๋ ์์๊ฐ FIFO์ธ์ค ์์๋๋ฐ ๋ค์ ์ฝ์ด๋ณด๋ LIFO์๋ค.
์ข ๋ณต์กํ์ง๋ง ใ
์ ๋ต ํ์ ์ ๋ฐ์ ์ฝ๋์ด๋ค.
from collections import deque
def solution(plans):
answer = []
plans = sorted(plans,key = lambda x : (x[1])) # ์๊ฐ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
q = deque()
n = len(plans)
next = 1
cur_time = plans[0][1]
cur_task = plans[0]
while len(answer) < n:
## 1. ํ ์ผ ์ ํ๊ธฐ
if cur_time == plans[0][1]:
pass
# 1-1. ์ง๊ธ์ด ๋ค์ํ๋ ์์์๊ฐ์ด๋ผ๋ฉด ๋ฐ๋ก ๋ค์ํ๋์ ์์
elif next < n and plans[next][1] == cur_time:
cur_task = plans[next]
next += 1
# 1-2. ํ๋ค ๋ง ๊ณผ์ ๊ฐ ๋จ์ ์๋์ง ํ์์ ์ฒดํฌ
elif len(q) > 0:
if next >= n: # ๋จ์ ๋ค์ ํ๋์ด ์๋ค๋ฉด
# ํ์ ์๋๊ฑฐ ๋ค ์ํ ํ ์ข
๋ฃ
while q:
answer.append(q.pop()[0])
break
else:
# ํ์์ ๊บผ๋ธ ๊ณผ์ ์์
cur_task = q.pop()
# 1-3. ํ๋ ๊ณผ์ ๊ฐ ์๋ค๋ฉด, plans์์ ๊บผ๋ธ ๊ณผ์ ๋ฅผ ์์
else:
if next < n:
cur_task = plans[next]
next += 1
## 2. ํ์ฌ ๊ณผ์ ๊ฐ ๋๋๋ ์๊ฐ ๊ณ์ฐํ๊ธฐ
# 2-1. ๋ค์ ํ๋์ด ๋จ์ ์์ง ์๋ค๋ฉด, ์๊ฐ ์๊ฐํ์ง ์๊ณ ์งํ
if next >= n:
answer.append(cur_task[0])
continue
# 2-2. ์๊ฐ ๊ณ์ฐ
else:
# ํ์์ ๊บผ๋ธ ๊ณผ์ ์ ๋ํด, ํ์ฌ์๊ฐ update
if cur_time < cur_task[1]:
cur_time = cur_task[1]
# ์๊ฐ ๊ณ์ฐ
curh , curm = map(int,cur_time.split(":"))
curm += int(cur_task[2])
if curm >= 60:
endh = curh + curm//60
endm = curm%60
else:
endh = curh
endm = curm
## 3. ๊ณผ์ ๋ฅผ ๋๋ผ ์ ์๋์ง ํ๋จ
# 3-1. ํ์ฌ ๊ณผ์ ๋ฅผ ๋๋ผ ์ ์๋ ๊ฒฝ์ฐ, ํ์ ๋ฃ๊ณ ํ์ฌ ์๊ฐ update ํด์ฃผ๊ธฐ
if str(endh).zfill(2)+":"+str(endm).zfill(2) > plans[next][1]:
h1, m1 = map(int,plans[next][1].split(":"))
h2, m2 = map(int,cur_time.split(":"))
temp = int(cur_task[2])-((h1*60+m1) - (h2*60+m2))
cur_task[2] = str(temp)
cur_time = plans[next][1] # cur time update
q.append(cur_task)
# 3-2. ํ์ฌ ๊ณผ์ ๋ฅผ ๋๋ผ ์ ์๋ ๊ฒฝ์ฐ, answer์ ๋ฃ๊ณ ํ์ฌ์๊ฐ updateํด์ฃผ๊ธฐ
else:
answer.append(cur_task[0])
cur_time = str(endh).zfill(2)+":"+str(endm).zfill(2)
return answer
์ ์ด์ง๋ฝ๋ค
์น๊ตฌ๋คํ๊ณ ๋น๊ตํด๋ณด์๋, ์ ์ถํ ์ฌ๋๋ค๊ณผ ๋น๊ตํด ๋ณด์๋ ๋ด ์ฝ๋๊ฐ ์ข ๊ธด ํธ์ธ ๊ฒ ๊ฐ์์ ์ฝ๊ฐ ๋ฐ์ฑ์ ํ๊ฒ ๋์๋ค.
๊ทธ๋ฆฌ๊ณ ์๊พธ ์ค๋ต์ด ๋์ค๋ ์ด์ ๋ฅผ ์ฐพ๊ธฐ๊น์ง๋ ์๋นํ ์๊ฐ์ด ๊ฑธ๋ ค์..
๋ค์๋ถํฐ๋ ๋ฌธ์ ์ด์ฌํ ์ฝ๊ณ , ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์งค์ง ๊ตฌ์์ ํํํ ํด๋๊ณ ๋์ ์ฝ๋ ์์ฑ์ ์์ํด์ผ๊ฒ ๋ค.
์ด ๋ฌธ์ ๋ ํ ๋ฒ ๋ ํ์ด๋ด์ผ๊ฒ ๋ค.
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > ๊ตฌํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฐฉ๋ฌธ ๊ธธ์ด (0) | 2023.06.22 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค]2018 ์นด์นด์ค ์์ถ (0) | 2023.06.22 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ (0) | 2023.06.07 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๋ก์ธ์ค (0) | 2023.06.06 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ธฐ๋ฅ๊ฐ๋ฐ (0) | 2023.06.04 |