๐น ์ฝ๋ฉ ํ ์คํธ ๊ณต๋ถ
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
INF = int(1e9)
def solution(alp, cop, problems):
problems.sort(key=lambda x : -x[0])
min_alp = max(problems[0][0], alp)
problems.sort(key=lambda x : -x[1])
min_cop = max(problems[0][1], cop)
dp = [[INF] * 151 for _ in range(151)]
dp[alp][cop] = 0
# ๊ณต๋ถ ์ด์ ์ ์ด๋ฏธ ๋ชจ๋ ๋ฌธ์ ํ ์ ์์ ๋
if alp >= min_alp and cop >= min_cop:
return 0
def can_solve(now_alp, now_cop, p):
a, c, ua, uc, cost = p
return now_alp >= a and now_cop >= c
def possible_alp_index(idx):
if idx > min_alp:
return min_alp
else:
return idx
def possible_cop_index(idx):
if idx > min_cop:
return min_cop
else:
return idx
for i in range(alp, min_alp + 1):
for j in range(cop, min_cop + 1):
# ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ์ฌ ์๊ณ ๋ ฅ 1 ์ฌ๋ฆฌ๊ธฐ
alp_idx = possible_alp_index(i+1)
dp[alp_idx][j] = min(dp[alp_idx][j], dp[i][j] + 1)
# ์ฝ๋ฉ์ ๊ณต๋ถํ์ฌ ์ฝ๋ฉ๋ ฅ 1 ์ฌ๋ฆฌ๊ธฐ
cop_idx = possible_cop_index(j+1)
dp[i][cop_idx] = min(dp[i][cop_idx], dp[i][j] + 1)
# ๋ฌธ์ ๋ฅผ ํ์ด ์๊ณ ๋ ฅ, ์ฝ๋ฉ๋ ฅ ์ฌ๋ฆฌ๊ธฐ
for p in problems:
a, c, ua, uc, cost = p
if can_solve(i, j, p):
alp_idx, cop_idx = possible_alp_index(i+ua), possible_cop_index(j+uc)
dp[alp_idx][cop_idx] = min(dp[alp_idx][cop_idx], dp[i][j] + cost)
return dp[min_alp][min_cop]
- ์ ํ์ฑ
ํ ์คํธ 1 ใ | ํต๊ณผ (0.62ms, 10.4MB) |
ํ ์คํธ 2 ใ | ํต๊ณผ (0.66ms, 10.4MB) |
ํ ์คํธ 3 ใ | ํต๊ณผ (0.36ms, 10.4MB) |
ํ ์คํธ 4 ใ | ํต๊ณผ (0.19ms, 10.4MB) |
ํ ์คํธ 5 ใ | ํต๊ณผ (0.34ms, 10.4MB) |
ํ ์คํธ 6 ใ | ํต๊ณผ (0.43ms, 10.4MB) |
ํ ์คํธ 7 ใ | ํต๊ณผ (0.20ms, 10.3MB) |
ํ ์คํธ 8 ใ | ํต๊ณผ (0.20ms, 10.5MB) |
ํ ์คํธ 9 ใ | ํต๊ณผ (0.28ms, 10.4MB) |
ํ ์คํธ 10 ใ | ํต๊ณผ (0.19ms, 10.5MB) |
- ํจ์จ์ฑ
ํ ์คํธ 1 ใ | ํต๊ณผ (34.96ms, 10.4MB) |
ํ ์คํธ 2 ใ | ํต๊ณผ (30.26ms, 10.5MB) |
ํ ์คํธ 3 ใ | ํต๊ณผ (4.83ms, 10.5MB) |
ํ ์คํธ 4 ใ | ํต๊ณผ (23.22ms, 10.2MB) |
ํ ์คํธ 5 ใ | ํต๊ณผ (171.49ms, 10.4MB) |
ํ ์คํธ 6 ใ | ํต๊ณผ (40.59ms, 10.5MB) |
ํ ์คํธ 7 ใ | ํต๊ณผ (210.64ms, 10.4MB) |
ํ ์คํธ 8 ใ | ํต๊ณผ (162.95ms, 10.4MB) |
ํ ์คํธ 9 ใ | ํต๊ณผ (384.07ms, 10.3MB) |
ํ ์คํธ 10 ใ | ํต๊ณผ (5.62ms, 10.3MB) |
3. ํด์ค
๋ฌธ์ ๋ฅผ ๋ชจ๋ ํ๊ธฐ ์ํด์๋ ๋ฌธ์ ๋ค ์ค ํ์ํ ์ต๋ ์๊ณ ๋ ฅ๊ณผ ์ต๋ ์ฝ๋ฉ๋ ฅ์ ๋ง์กฑํด์ผ ํ๋ค.
๊ฐ ์๊ณ ๋ ฅ๊ณผ ์ฝ๋ฉ๋ ฅ์ ๋๋ฌํ์ ๋์ ์ต์ ์๊ฐ์ dp์ ์ ์ฅํ๋ค.
โ โdp[์๊ณ ๋ ฅ][์ฝ๋ฉ๋ ฅ] = ๊ฑธ๋ฆฌ๋ ์ต์ ์๊ฐโ
์ฒ์ ์๊ณ ๋ ฅ, ์ฝ๋ฉ๋ ฅ์ผ ๋๋ 0์ผ๋ก ์ด๊ธฐํ ํด์ฃผ๊ณ ๋๋จธ์ง dp ๊ฐ์ ๋ฌดํ๋๋ก ์ค์ ํด์ค๋ค.
3๊ฐ์ง ๊ฒฝ์ฐ๋ก ์๊ณ ๋ ฅ, ์ฝ๋ฉ๋ ฅ์ ๋์ผ ์ ์๋ค.
์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ํ์ฌ ์๊ณ ๋ ฅ 1 ์ฌ๋ฆฌ๊ธฐ
โ dp[i+1][j] = min(dp[i+1][j], dp[i][j] + 1)
์ฝ๋ฉ ๊ณต๋ถ๋ฅผ ํ์ฌ ์ฝ๋ฉ๋ ฅ 1 ์ฌ๋ฆฌ๊ธฐ
โ dp[i][j+1] = min(dp[i][j+1], dp[i][j] + 1)
๋ฌธ์ ๋ฅผ ํ์ด ์๊ณ ๋ ฅ, ์ฝ๋ฉ๋ ฅ ์ฌ๋ฆฌ๊ธฐ
๋ฌธ์ ๋ฅผ ํ์์ ๋ ์ค๋ฅด๋ ์๊ณ ๋ ฅ : ua
๋ฌธ์ ๋ฅผ ํ์์ ๋ ์ค๋ฅด๋ ์ฝ๋ฉ๋ ฅ : uc
๋ฌธ์ ๋ฅผ ํ์์ ๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ : cost
โ dp[i+ua][j+uc] = min(dp[i+ua][j+uc], dp[i][j] + cost)
๊ฐ ๊ฒฐ๊ณผ๋ฅผ dp์ ์ ์ฅํ๊ณ ์ด๋ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํ ์ต์ ์๊ฐ์ dp[๋ชฉํ ์๊ณ ๋ ฅ][๋ชฉํ ์ฝ๋ฉ๋ ฅ]์ด๋ค.
โญย ์ด๋ (์ฒ์ ์๊ณ ๋ ฅ, ์ฒ์ ์ฝ๋ฉ๋ ฅ)์ด (๋ชฉํ ์๊ณ ๋ ฅ, ๋ชฉํ ์ฝ๋ฉ๋ ฅ)๋ณด๋ค ํฐ ๊ฒฝ์ฐ์ ๋ ํฐ ๊ฐ์ ๋ชฉํ ๊ฐ์ผ๋ก ๋ณํํ๊ณ dp๊ฐ์ ์ด๊ธฐํํด์ผํ๋ค.
โญย dp์ ์๊ณ ๋ ฅ, ์ฝ๋ฉ๋ ฅ์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ ๋ ๋ชฉํ๋ฅผ ๋์ด๊ฐ๊ฑฐ๋ ์ ํด์ง ํฌ๊ธฐ๋ณด๋ค ๋ ํฐ ๊ฐ์ผ๋ก ์ ๊ทผํ ๊ฒฝ์ฐ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ผ์ (๋ชฉํ ์๊ณ ๋ ฅ, ๋ชฉํ ์ฝ๋ฉ๋ ฅ)๋ณด๋ค ํฐ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ ๊ฒฝ์ฐ๋ฅผ ๋ง๊ธฐ ์ํด ์ธ๋ฑ์ค๊ฐ ๋ ํด ๊ฒฝ์ฐ ๋ชฉํ ์๊ณ ๋ ฅ, ๋ชฉํ ์ฝ๋ฉ๋ ฅ์ผ๋ก ๋ฐ๊พธ์ด์ค ํ ๊ณ์ฐํ๋ค.