๋ฌธ์ ์ค๋ช
๊ฐ๋ฐ์ ์ค๋ชจ๋ ์ด์์ฒด์ ๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ค๋ชจ๊ฐ ๋ง๋ ์ด์์ฒด์ ๋ ํ๋ก๊ทธ๋จ์ ์ฐ์ ์์์ ํธ์ถ๋ ์๊ฐ์ ๋ฐ๋ผ ์คํ ์์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋ชจ๋ ํ๋ก๊ทธ๋จ์๋ 1๋ถํฐ 10๊น์ง์ ์ ์๊ฐ ๋งค๊ฒจ์ ธ ์์ผ๋ฉฐ, ์ด ์ ์๊ฐ ๋ฎ์์๋ก ์ฐ์ ์์๊ฐ ๋์ ํ๋ก๊ทธ๋จ์ ๋๋ค. ๊ฐ ํ๋ก๊ทธ๋จ๋ค์ ์คํ ์๊ฐ์ด ์ ํด์ ธ ์์ผ๋ฉฐ ํ๋ก๊ทธ๋จ์ด ํธ์ถ๋๋ฉด ๋๊ธฐ์ํ์ ์๋ค๊ฐ ์์ ์ ์์๊ฐ ๋๋ฉด ์คํ ์๊ฐ ๋์ ์คํ๋ ๋ค ์ข ๋ฃ๋ฉ๋๋ค.
์ค๋ชจ๊ฐ ๋ง๋ ์ด์์ฒด์ ๋ ํธ์ถ๋ ํ๋ก๊ทธ๋จ๋ค ์ค ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ํ๋ก๊ทธ๋จ์ ๋จผ์ ์คํํฉ๋๋ค. ํธ์ถ๋ ๊ฐ ํ๋ก๊ทธ๋จ์ ์์ ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ ํธ์ถ๋ ํ๋ก๊ทธ๋จ์ด ๋ชจ๋ ์ข ๋ฃ๋ ํ์ ์คํ๋ฉ๋๋ค. ๋จ, ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ ํ๋ก๊ทธ๋จ์ด ํธ์ถ๋์ด๋ ์คํ ์ค์ด๋ ํ๋ก๊ทธ๋จ์ ์ค๋จ๋์ง ์๊ณ ์ข ๋ฃ๋ ๋๊น์ง ๊ณ์ ์คํ๋ฉ๋๋ค. ๋ํ, ์ฐ์ ์์๊ฐ ๊ฐ์ ํ๋ก๊ทธ๋จ๋ค ์ค์์๋ ๋จผ์ ํธ์ถ๋ ํ๋ก๊ทธ๋จ์ด ๋จผ์ ์คํ๋ฉ๋๋ค.
๋ค์์ 1๋ฒ๋ถํฐ 4๋ฒ๊น์ง์ 4๊ฐ์ ํ๋ก๊ทธ๋จ์ด ํธ์ถ๋ ์์์ ๋๋ค.
์๋ฅผ ๋ค์ด, 1๋ฒ๋ถํฐ 4๋ฒ๊น์ง 4๊ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์๊ฐ ์์๋๋ก 2, 1, 3, 3์ด๋ฉฐ, ํธ์ถ๋ ์๊ฐ์ 0, 5, 5, 12์ด์ด๊ณ , ์ํ์๊ฐ์ 10, 5, 3, 2๋ผ๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
- 1๋ฒ ํ๋ก๊ทธ๋จ์ด 0์ด์ ํธ์ถ๋ ๋ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ด ์์ผ๋ฏ๋ก, 0์ด์ 1๋ฒ ํ๋ก๊ทธ๋จ์ด ๋ฐ๋ก ์คํ๋ฉ๋๋ค. 1๋ฒ ํ๋ก๊ทธ๋จ์ 10์ด์ ์ข ๋ฃ๋๋ฉฐ, 2, 3๋ฒ ํ๋ก๊ทธ๋จ์ด ์๋ก ํธ์ถ๋์ต๋๋ค.
- ํธ์ถ๋ 2, 3๋ฒ ํ๋ก๊ทธ๋จ ์ค 2๋ฒ ํ๋ก๊ทธ๋จ์ ์ ์๊ฐ 1๋ก ์ฐ์ ์์๊ฐ ๋์ต๋๋ค. 2๋ฒ ํ๋ก๊ทธ๋จ์ 5์ด์ ํธ์ถ๋์ด 10์ด์ ์คํ๋ ๋๊น์ง 5์ด ๋์ ๋๊ธฐํ์ต๋๋ค. 2๋ฒ ํ๋ก๊ทธ๋จ์ 15์ด์ ์ข ๋ฃ๋๋ฉฐ, 4๋ฒ ํ๋ก๊ทธ๋จ์ด ์๋ก ํธ์ถ๋์ต๋๋ค.
- ํธ์ถ๋ 3, 4๋ฒ ํ๋ก๊ทธ๋จ์ ์ ์๊ฐ ๊ฐ์ง๋ง, 3๋ฒ ํ๋ก๊ทธ๋จ์ด ๋จผ์ ํธ์ถ๋์๊ธฐ ๋๋ฌธ์ 3๋ฒ ํ๋ก๊ทธ๋จ์ด ๋จผ์ ์คํ๋ฉ๋๋ค. 3๋ฒ ํ๋ก๊ทธ๋จ์ 5์ด์ ํธ์ถ๋์ด 15์ด์ ์คํ๋ ๋๊น์ง 10์ด ๋์ ๋๊ธฐํ์ต๋๋ค. 3๋ฒ ํ๋ก๊ทธ๋จ์ 18์ด์ ์ข ๋ฃ๋ฉ๋๋ค.
- 4๋ฒ ํ๋ก๊ทธ๋จ์ด ๋ง์ง๋ง์ผ๋ก ์คํ๋๋ฉฐ, 4๋ฒ ํ๋ก๊ทธ๋จ์ 12์ด์ ํธ์ถ๋์ด 18์ด์ ์คํ๋ ๋๊น์ง 6์ด ๋์ ๋๊ธฐํ์ต๋๋ค. 4๋ฒ ํ๋ก๊ทธ๋จ์ 20์ด์ ์ข ๋ฃ๋ฉ๋๋ค.
๋ชจ๋ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ ์๊ฐ์ 20์ด์ด๋ฉฐ, ๊ฐ ํ๋ก๊ทธ๋จ์ด ๋๊ธฐํ ์๊ฐ์ ์์๋๋ก 0, 5, 10, 6์ด์ ๋๋ค. ์ ์๊ฐ 1์ธ ํ๋ก๊ทธ๋จ์ ๋๊ธฐ์๊ฐ ํฉ์ 5๊ณ , ์ ์๊ฐ 3์ธ ํ๋ก๊ทธ๋จ์ ๋๊ธฐ์๊ฐ ํฉ์ 16 ์์ ์ ์ ์์ต๋๋ค.
ํ๋ก๊ทธ๋จ๋ค์ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ 2์ฐจ์ ์ ์ ๋ฐฐ์ด program์ด ์ฃผ์ด์ง ๋, ๋ชจ๋ ํ๋ก๊ทธ๋จ๋ค์ด ์ข ๋ฃ๋๋ ์๊ฐ๊ณผ ํ๋ก๊ทธ๋จ์ ์ ์๋ง๋ค ๋๊ธฐ์๊ฐ์ ํฉ์ ์ ์ ๋ฐฐ์ด์ ๋ด์ return ํ๋ solution ํจ์๋ฅผ ์์ฑํ์ธ์. return ํด์ผ ํ๋ answer ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 11์ธ ์ ์ ๋ฐฐ์ด์ ๋๋ค. answer[0]์ ๋ชจ๋ ํ๋ก๊ทธ๋จ๋ค์ด ์ข ๋ฃ๋๋ ์๊ฐ์ ์๋ฏธํ๋ฉฐ, answer[i](1 ≤ i ≤ 10)๋ ํ๋ก๊ทธ๋จ์ ์ ์๊ฐ i์ธ ํ๋ก๊ทธ๋จ๋ค์ ๋๊ธฐ์๊ฐ์ ํฉ์ ์๋ฏธํฉ๋๋ค.
์ ํ ์ฌํญ
- 1 ≤ program์ ๊ธธ์ด ≤ 100,000
- program[i]์ i+1๋ฒ ํ๋ก๊ทธ๋จ์ ์ ๋ณด๋ฅผ ์๋ฏธํ๋ฉฐ, [a, b, c]์ ํํ๋ก ์ฃผ์ด์ง๋๋ค.
- a๋ ํ๋ก๊ทธ๋จ์ ์ ์๋ฅผ ์๋ฏธํ๋ฉฐ, 1 ≤ a ≤ 10 ์ ๋ง์กฑํฉ๋๋ค.
- b๋ ํ๋ก๊ทธ๋จ์ด ํธ์ถ๋ ์๊ฐ์ ์๋ฏธํ๋ฉฐ, 0 ≤ b ≤ 10,000,000์ ๋ง์กฑํฉ๋๋ค.
- c๋ ํ๋ก๊ทธ๋จ์ ์คํ ์๊ฐ์ ์๋ฏธํ๋ฉฐ, 1 ≤ c ≤ 1,000์ ๋ง์กฑํฉ๋๋ค.
- a, b์์ด ์ค๋ณต๋๋ ํ๋ก๊ทธ๋จ์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค. ์ฆ, ํธ์ถ๋ ์๊ฐ์ด ๊ฐ์ผ๋ฉด์ ์ ์๋ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
program | result(answer) |
[[2, 0, 10], [1, 5, 5], [3, 5, 3], [3, 12, 2]] | [20, 5, 0, 16, 0, 0, 0, 0, 0, 0, 0] |
[[3, 6, 4], [4, 2, 5], [1, 0, 5], [5, 0, 5]] | [19, 0, 0, 4, 3, 14, 0, 0, 0, 0, 0] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- ๋ฌธ์ ์์์ ๊ฐ์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
- ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
ํ์ด
- ์ฐ์ ์์ ๋์ค๋๊น ์ฐ์ ์์ ํ๋ค.
- ์๋ ๊ฑฐ ๋์ค๋ฉด ๊ฐ์๊ธฐ ๋ฌด์ง์ฑ ์ฝ๋๋ก ๋ณ์ ใ ก.ใ ก;;;
- ๋ก~ ใ ใ ใ
from queue import PriorityQueue
def solution(program):
answer = [0 for _ in range(11)]
ctime = 0 # ๋์ ์คํ ์๊ฐ
cjob = -1 # ํ์ฌ ์์
์ธ๋ฑ์ค (-1์ ๋น์ด์์)
cq = PriorityQueue() # ํธ์ถ ์๊ฐ ์์ผ๋ก ์์
์ ์ฅ
for i,p in enumerate(program):
cq.put((p[1],p[0],p[2])) # ํธ์ถ์๊ฐ, ์ฐ์ ์์, ์คํ์๊ฐ, ์ธ๋ฑ์ค
while cq.empty() != True:
ํธ์ถ์๊ฐ, ์ฐ์ ์์, ์คํ์๊ฐ = cq.get()
if ctime > ํธ์ถ์๊ฐ:
answer[์ฐ์ ์์] += ctime - ํธ์ถ์๊ฐ
ctime += ์คํ์๊ฐ
answer[0] = ctime
print(program)
print(answer)
return answer
ํ
์คํธ 1
์
๋ ฅ๊ฐ ใ [[2, 0, 10], [1, 5, 5], [3, 5, 3], [3, 12, 2]]
๊ธฐ๋๊ฐ ใ [20, 5, 0, 16, 0, 0, 0, 0, 0, 0, 0]
์คํ ๊ฒฐ๊ณผ ใ ํ
์คํธ๋ฅผ ํต๊ณผํ์์ต๋๋ค.
์ถ๋ ฅ ใ
[[2, 0, 10], [1, 5, 5], [3, 5, 3], [3, 12, 2]]
[20, 5, 0, 16, 0, 0, 0, 0, 0, 0, 0]
ํ
์คํธ 2
์
๋ ฅ๊ฐ ใ [[3, 6, 4], [4, 2, 5], [1, 0, 5], [5, 0, 5]]
๊ธฐ๋๊ฐ ใ [19, 0, 0, 4, 3, 14, 0, 0, 0, 0, 0]
์คํ ๊ฒฐ๊ณผ ใ
์คํํ ๊ฒฐ๊ด๊ฐ [19,0,0,9,8,5,0,0,0,0,0]์ด ๊ธฐ๋๊ฐ [19,0,0,4,3,14,0,0,0,0,0]๊ณผ ๋ค๋ฆ
๋๋ค.
์ถ๋ ฅ ใ
[[3, 6, 4], [4, 2, 5], [1, 0, 5], [5, 0, 5]]
[19, 0, 0, 9, 8, 5, 0, 0, 0, 0, 0]
- ๊ทธ๋... ์ด๋ ๊ฒ ์ฌ์ธ๋ฆฌ ์์ด... 4๋ฒ์งธ ๋ฌธ์ ์์... ใ .ใ ก;
- ๊ณ ์ณ๋ดค๋๋ ์ด๋ฒ์ ์ฒซ๋ฒ์งธ ๊ฑฐ ํต๊ณผ ๋ชป ํจ
from queue import PriorityQueue
def solution(program):
answer = [0 for _ in range(11)]
ctime = 0 # ๋์ ์คํ ์๊ฐ
cjob = -1 # ํ์ฌ ์์
์ธ๋ฑ์ค (-1์ ๋น์ด์์)
cq = PriorityQueue() # ํธ์ถ ์๊ฐ ์์ผ๋ก ์์
์ ์ฅ
for i,p in enumerate(program):
cq.put((p[1],p[0],p[2],i)) # ํธ์ถ์๊ฐ, ์ฐ์ ์์, ์คํ์๊ฐ, ์ธ๋ฑ์ค
while cq.empty() != True:
ํธ์ถ์๊ฐ, ์ฐ์ ์์, ์คํ์๊ฐ,i = cq.get()
if ctime > ํธ์ถ์๊ฐ: # ์ด๋ฏธ ์๊ฐ์ด ์ง๋๊ฐ์
# ๋๊ธฐ์ด๋ก ๋ค์ ์ง์ด๋ฃ๊ธฐ
cq.put((ctime, ์ฐ์ ์์, ์คํ์๊ฐ,i))
else:
answer[์ฐ์ ์์] = ctime - program[i][1] # ๊ธฐ๋ค๋ฆฐ ์๊ฐ
ctime += ์คํ์๊ฐ
answer[0] = ctime
return answer
ํ
์คํธ 1
์
๋ ฅ๊ฐ ใ [[2, 0, 10], [1, 5, 5], [3, 5, 3], [3, 12, 2]]
๊ธฐ๋๊ฐ ใ [20, 5, 0, 16, 0, 0, 0, 0, 0, 0, 0]
์คํ ๊ฒฐ๊ณผ ใ
์คํํ ๊ฒฐ๊ด๊ฐ [20,5,0,12,0,0,0,0,0,0,0]์ด ๊ธฐ๋๊ฐ [20,5,0,16,0,0,0,0,0,0,0]๊ณผ ๋ค๋ฆ
๋๋ค.
ํ
์คํธ 2
์
๋ ฅ๊ฐ ใ [[3, 6, 4], [4, 2, 5], [1, 0, 5], [5, 0, 5]]
๊ธฐ๋๊ฐ ใ [19, 0, 0, 4, 3, 14, 0, 0, 0, 0, 0]
์คํ ๊ฒฐ๊ณผ ใ ํ
์คํธ๋ฅผ ํต๊ณผํ์์ต๋๋ค.
- ๋ฏธ์น๊ฒ ๋ค ใ
ใ
ใ
- ์ด๊ฑฐ ์ฌ์ด ๊ฑฐ ๊ฐ์ผ๋ฉด์ ์ด๋ ต๋ค. ๋ค์...
- ๋ค์ ์ฒจ๋ถํฐ ์ ๋ฆฌ
- ๋จผ์ ์์ ์ ํธ์ถ์์ผ๋ก ์ฐ์ ์์ ํ์ ๋ฃ๋๋ค.
- ์ฒซ๋ฒ์งธ ์์
- ํ๋ก์ธ์ค๊ฐ ๋น์ด์์ผ๋ฉด, ํธ์ถํ์์ ๊บผ๋ธ ์ฒซ๋ฒ์งธ ์์ ์ ๋ฐ๋ก ์คํํ๊ณ ๋์ ์๊ฐ ๊ฐฑ์
- ๋๋ฒ์งธ ์์
์ ๋์ ์๊ฐ์ด ๊ฐฑ์ ๋์ด ์์ผ๋ฏ๋ก ํ์์ ๊บผ๋ด๊ธฐ ์ ์ ํ์ฌ ์๊ฐ๊ณผ ํธ์ถ ์๊ฐ์ ๋น๊ต
- ๋์ ์๊ฐ์ด ํธ์ถ์๊ฐ๋ณด๋ค ์๋ค? ๊ทธ๋ผ ์์ ์คํ
- ๋์ ์๊ฐ์ด ํธ์ถ์๊ฐ๋ณด๋ค ํฌ๋ค? ๊ทธ๋ผ ์ผ๋จ ์์
ํ์ ๋ฃ๊ณ ํ๋ ๋ ๊บผ๋
- ํ๋ ๋ ๊บผ๋ธ ์์ ์ ํธ์ถ์๊ฐ์ด ๋์ ์๊ฐ๋ณด๋ค ์์ผ๋ฉด ๋ ๊บผ๋...
- ์์
ํ์ ๋ฃ์ ์์
์ ์ฐ์ ์์๊ฐ ์์ ๊ฒ๋ถํฐ ๊บผ๋ด์ ์์
์คํ
- ๋์ ์๊ฐ ๊ฐฑ์ .
- ํธ์ถํ์์ ํ๋ ๊บผ๋ด์ ๋์ ์๊ฐ๋ณด๋ค ํธ์ถ์๊ฐ์ด ์์ผ๋ฉด ์์ ํ์ ๋ฃ๊ธฐ
- ๊ทธ๋ฆฌ๊ณ ๊ณ์ ๋ฐ๋ณต. ํธ์ถ์๊ฐ ๋ณด๋ค ํฐ ์์ ์ด ๋์ฌ ๋ ๊น์ง ๋ฐ๋ณต
- ๋์ ์๊ฐ ๊ฐฑ์ .
- ๊ทธ ๋ด์ ์์
ํ๋ค๊ฐ
- ์์ ํ๋ ๋น์๊ณ , ํธ์ถํ์์ ๊บผ๋ธ ๊ฒ๋ ๋์ ์๊ฐ๋ณด๋ค ํธ์ถ์๊ฐ์ด ํฌ๋ฉด.
- ์์ ์ข ๋ฃ. ํ๋ก์ธ์ค๋ ๋น์ด์๊ณ , ๋งจ์์ผ๋ก ๊ฐ์
- ์์ ํ๊ฐ ๋น์ด์์ผ๋ ํธ์ถํ์์ ๊บผ๋ธ ๊ฒ ์คํํ๊ณ ๋์ ์๊ฐ ๊ฐฑ์
- ๊น์ง ์๊ฐํ๊ณ ์ฝ๋๋ฅผ ์ง๋ณด์์ผ๋......... ๋ง!
- PCCP ์ฝ์ง ์๋ค. ์ข ๋ ๊ณต๋ถํ๊ณ ์ํ์ ์น๋ ํด์ผํ ๊ฒ ๊ฐ๋ค.
from heapq import heapify as heapify, heappush as push, heappop as pop
def solution(program):
answer = [0 for _ in range(11)]
ctime = 0 # ๋์ ์คํ ์๊ฐ
waitq = [] # ํธ์ถ ์๊ฐ ์์ผ๋ก ์์
์ ์ฅ
taskq = [] # ์ฐ์ ์์ ์์ผ๋ก ์์
์ ์ฅ
for i,p in enumerate(program):
push(waitq, (p[1],p[0],p[2])) # [0]์ฐ์ ์์, [1]ํธ์ถ์๊ฐ, [2]์คํ์๊ฐ, [i]์ธ๋ฑ์ค
ํธ์ถ์๊ฐ, ์ฐ์ ์์, ์คํ์๊ฐ = pop(waitq) # ๋๊ธฐ ํ์์ ๊บผ๋ด์
ctime = ํธ์ถ์๊ฐ # ์๊ฐ์ ๊ฐฑ์ ํ๊ณ
push(taskq, (์ฐ์ ์์,ํธ์ถ์๊ฐ,์คํ์๊ฐ)) # ์์
ํ์ ๋ฐ์ด๋ฃ๊ธฐ
while len(taskq) >0 or len(waitq) > 0:
if len(taskq) == 0: # ์์
์ด ๋น์์ ๋ ์๊ฐ์ ํธ์ถ์๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์์
ํ๋ก ์ฎ๊ธฐ๊ธฐ
ctime = waitq[0][0]
while len(waitq) > 0 and waitq[0][0] <= ctime: # ์์
ํ์ ๋ฐ์ด๋ฃ๊ธฐ
ํธ์ถ์๊ฐ, ์ฐ์ ์์, ์คํ์๊ฐ = pop(waitq)
push(taskq, (์ฐ์ ์์,ํธ์ถ์๊ฐ,์คํ์๊ฐ))
์ฐ์ ์์, ํธ์ถ์๊ฐ, ์คํ์๊ฐ = pop(taskq) # ์์
ํ์์ ๊บผ๋ด์
answer[์ฐ์ ์์] += ctime - ํธ์ถ์๊ฐ # ์ฐ์ ์์ ๋ฐฐ์ด์ ๋๊ธฐ์๊ฐ์ ์
๋ ฅํจ
ctime += ์คํ์๊ฐ # ๋์ ์๊ฐ ๊ฐฑ์
while len(waitq) > 0 and waitq[0][0] <= ctime: # ์๊ฐ์ด ๊ฐฑ์ ๋์ผ๋๊น ์ง๋๊ฐ๊ฒ ์์ผ๋ฉด ์์
ํ๋ก ์ฎ๊ธด๋ค.
ํธ์ถ์๊ฐ, ์ฐ์ ์์, ์คํ์๊ฐ = pop(waitq)
push(taskq, (์ฐ์ ์์,ํธ์ถ์๊ฐ,์คํ์๊ฐ))
answer[0] = ctime
return answer
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (2.13ms, 10.7MB)
ํ
์คํธ 2 ใ ํต๊ณผ (132.63ms, 21.5MB)
ํ
์คํธ 3 ใ ํต๊ณผ (87.54ms, 16.1MB)
ํ
์คํธ 4 ใ ํต๊ณผ (68.40ms, 16.8MB)
ํ
์คํธ 5 ใ ํต๊ณผ (149.43ms, 22.3MB)
ํ
์คํธ 6 ใ ํต๊ณผ (288.01ms, 31.5MB)
ํ
์คํธ 7 ใ ํต๊ณผ (7.96ms, 11.4MB)
ํ
์คํธ 8 ใ ํต๊ณผ (104.60ms, 19.7MB)
ํ
์คํธ 9 ใ ํต๊ณผ (89.96ms, 17.6MB)
ํ
์คํธ 10 ใ ํต๊ณผ (305.83ms, 33.2MB)
ํ
์คํธ 11 ใ ํต๊ณผ (307.52ms, 33.1MB)
ํ
์คํธ 12 ใ ํต๊ณผ (294.58ms, 33.1MB)
ํ
์คํธ 13 ใ ํต๊ณผ (402.38ms, 33.3MB)
ํ
์คํธ 14 ใ ํต๊ณผ (421.53ms, 33.2MB)
- ์ฝ๊ฐ์ ์ฐจ์ด. ๋ณ๋ก ์๋ฏธ๋ ์๋ค. ใ ใ
from heapq import heapify as heapify, heappush as push, heappop as pop
def solution(program):
answer = [0 for _ in range(11)]
ctime = 0 # ๋์ ์คํ ์๊ฐ
waitq = [] # ํธ์ถ ์๊ฐ ์์ผ๋ก ์์
์ ์ฅ
taskq = [] # ์ฐ์ ์์ ์์ผ๋ก ์์
์ ์ฅ
for i,p in enumerate(program):
push(waitq, (p[1],p[0],p[2])) # [0]์ฐ์ ์์, [1]ํธ์ถ์๊ฐ, [2]์คํ์๊ฐ, [i]์ธ๋ฑ์ค
ํธ์ถ์๊ฐ, ์ฐ์ ์์, ์คํ์๊ฐ = pop(waitq) # ๋๊ธฐ ํ์์ ๊บผ๋ด์
ctime = ํธ์ถ์๊ฐ # ์๊ฐ์ ๊ฐฑ์ ํ๊ณ
push(taskq, (์ฐ์ ์์,ํธ์ถ์๊ฐ,์คํ์๊ฐ)) # ์์
ํ์ ๋ฐ์ด๋ฃ๊ธฐ
while len(taskq) >0 or len(waitq) > 0:
if len(taskq) == 0: # ์์
์ด ๋น์์ ๋ ์๊ฐ์ ํธ์ถ์๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์์
ํ๋ก ์ฎ๊ธฐ๊ธฐ
ctime = waitq[0][0]
ํธ์ถ์๊ฐ, ์ฐ์ ์์, ์คํ์๊ฐ = pop(waitq)
push(taskq, (์ฐ์ ์์,ํธ์ถ์๊ฐ,์คํ์๊ฐ))
์ฐ์ ์์, ํธ์ถ์๊ฐ, ์คํ์๊ฐ = pop(taskq) # ์์
ํ์์ ๊บผ๋ด์
answer[์ฐ์ ์์] += ctime - ํธ์ถ์๊ฐ # ์ฐ์ ์์ ๋ฐฐ์ด์ ๋๊ธฐ์๊ฐ์ ์
๋ ฅํจ
ctime += ์คํ์๊ฐ # ๋์ ์๊ฐ ๊ฐฑ์
while len(waitq) > 0 and waitq[0][0] <= ctime: # ์๊ฐ์ด ๊ฐฑ์ ๋์ผ๋๊น ์ง๋๊ฐ๊ฒ ์์ผ๋ฉด ์์
ํ๋ก ์ฎ๊ธด๋ค.
ํธ์ถ์๊ฐ, ์ฐ์ ์์, ์คํ์๊ฐ = pop(waitq)
push(taskq, (์ฐ์ ์์,ํธ์ถ์๊ฐ,์คํ์๊ฐ))
answer[0] = ctime
return answer
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (3.67ms, 10.7MB)
ํ
์คํธ 2 ใ ํต๊ณผ (208.40ms, 21.5MB)
ํ
์คํธ 3 ใ ํต๊ณผ (101.01ms, 16MB)
ํ
์คํธ 4 ใ ํต๊ณผ (125.54ms, 16.9MB)
ํ
์คํธ 5 ใ ํต๊ณผ (168.41ms, 22.4MB)
ํ
์คํธ 6 ใ ํต๊ณผ (484.32ms, 31.7MB)
ํ
์คํธ 7 ใ ํต๊ณผ (7.44ms, 10.9MB)
ํ
์คํธ 8 ใ ํต๊ณผ (129.25ms, 19.8MB)
ํ
์คํธ 9 ใ ํต๊ณผ (130.05ms, 17.6MB)
ํ
์คํธ 10 ใ ํต๊ณผ (542.38ms, 33.1MB)
ํ
์คํธ 11 ใ ํต๊ณผ (529.98ms, 33MB)
ํ
์คํธ 12 ใ ํต๊ณผ (400.46ms, 33.1MB)
ํ
์คํธ 13 ใ ํต๊ณผ (376.77ms, 33.1MB)
ํ
์คํธ 14 ใ ํต๊ณผ (408.66ms, 33.2MB)
- ๊ณ ์์ ํ์ด. ์ฝ๋ ์ง์ง ๊น๋ํ๋ค.
from queue import PriorityQueue
def call_programs(program, cur, q):
while program and program[0][1] <= cur:
q.put(program.pop(0))
def solution(program):
answer = [0 for _ in range(10)]
program.sort(key=lambda x: x[1])
q = PriorityQueue()
cur = 0
while program or q.empty() == False:
if q.empty(): cur = program[0][1]
else:
execute = q.get()
answer[execute[0] - 1] += cur - execute[1]
cur += execute[2]
call_programs(program, cur, q)
return [cur, *answer]
'๊ฒ์ ํ๋ก๊ทธ๋๋ฐ > Python ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[PCCP ๋ชจ์๊ณ ์ฌ#2] ์ ์ ์ฌ์ ๊ต์ก (์ฐ์ ์์ํ) (0) | 2023.03.10 |
---|---|
[PCCP ๋ชจ์๊ณ ์ฌ#2] ์ค์ต์ฉ ๋ก๋ด (๋จ์ ๊ตฌํ) (1) | 2023.03.09 |
[PCCP ๋ชจ์๊ณ ์ฌ#1] ์ ์ ๋ฒ์น (์คํ) (0) | 2023.03.07 |
[PCCP ๋ชจ์๊ณ ์ฌ#1] ์ฒด์ก๋ํ (itertools.permutation) (0) | 2023.03.06 |
ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉ์ ๋ฌธ์ญ๋์ธ์ฆ์ํ(PCCP) ์ฝ๋ฉํ์์ญ๋์ธ์ฆ(PCCE) (0) | 2023.03.06 |