<๋ฌธ์ ๋งํฌ>
https://school.programmers.co.kr/learn/courses/30/lessons/1843
<ํ์ด ์ ๋ต>
1. ๋งค์ฐ ์ด๋ ค์ ๋ dp + ๋ถํ ์ ๋ณต ๋ฌธ์
2. ์ฐ์ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ค ๊ตฌ๊ฐ์ ๋๋์ด์ ๊ณ์ฐํด์ฃผ๋ฉด ๋๋ค. (๊ตฌ๊ฐํฉ๊ณผ ์ ์ฌ)
10๊ฐ์ ํผ์ฐ์ฐ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํ ๋ ๋ค์๊ณผ ๊ฐ๋ค
[1] ~ [2 ~ 10]
[1 ~ 2] ~ [3 ~ 10]
[1 ~ 3] ~ [4 ~ 10]
...
[1 ~ 9] ~ [10]
3. - ์ฐ์ฐ์๊ฐ ์์ผ๋ฏ๋ก ์ต๋๊ฐ ํ ์ด๋ธ๊ณผ ์ต์๊ฐ ํ ์ด๋ธ ๋ ๊ฐ์ ๋ฐฐ์ด์ ๋ง๋ ๋ค
4. ๊ตฌ๊ฐ์ ๊ธธ์ด (1 ~ N - 1)๋ง๋ค ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ ํด๋น ๊ตฌ๊ฐ ๋ด์์ ๋ค์ ์์(i)๊ณผ ๋(j) ํผ์ฐ์ฐ์์ ์ฌ์ด์์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์(k) ๊ตฌ๊ฐ์ ๋์ ์ฐ์ฐ (์ต์/์ต๋)๊ฐ์ ๊ตฌํด์ฃผ๋ฉด ๋๋ค.
5. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ต๋๊ฐ ํ ์ด๋ธ dp_max[0][N - 1]์ arr์ ์ฒซ๋ฒ์จฐ ํผ์ฐ์ฐ์๋ถํฐ ๋ง์ง๋ง ํผ์ฐ์ฐ์ ๊ตฌ๊ฐ, ์ฆ ์ ์ฒด ๊ตฌ๊ฐ์ ์ต๋๊ฐ์ ๊ฐ์ผ๋ก ๊ฐ์ง๊ฒ ๋๋ค.
6. dp๋ผ๋ ๊ฑธ ์๊ณ ํผ ์ํ์์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ผ๋ก ๋๋ ์ ๊ตฌ๊ฐํฉ์ผ๋ก ์ ๊ทผํด์ผ๊ฒ ๋ค๋ ๊ฒ๊น์ง๋ ์๊ฐํ๋๋ฐ ์ ํ์์ด๋ dp ํ ์ด๋ธ์ ์ด๋ป๊ฒ ์ง์ผ๋ ์ง ๊ฐ์ด ์ ์์ ๊ฒ์ํด์ ํ์๋ค. ์๋ง ์ฌ์ ์ ๋ณด ์์ด ์ํ์ฅ์์ ๋ดค๋ค๋ฉด ์ ๋ ๋ชป ํ์์ ๋ฌธ์ ... ์ด์ฌํ ๊ณต๋ถํด์ผ๊ฒ ๋ค
<์ ๋ต ์ฝ๋>
import sys
# 230125 ํ๋ก๊ทธ๋๋จธ์ค ์ฌ์น์ฐ์ฐ
def solution(arr):
answer = -1
N = len(arr)//2 + 1
INF = sys.maxsize
# dp ํ
์ด๋ธ ์ด๊ธฐํ (๋ฒ์์ ๋ฐ๋ฅธ ์ต์๊ฐ ์ต๋๊ฐ ์ฐ์ฐ ํ
์ด๋ธ)
# arr[i][j] = i๋ฒ์งธ ํผ์ฐ์ฐ์ ~ j๋ฒ์งธ ํผ์ฐ์ฐ์๊น์ง ์ฐ์ฐ์ ์ต์๊ฐ/์ต๋๊ฐ
dp_min = [[INF for _ in range(101)] for _ in range(101)]
dp_max = [[-INF for _ in range(101)] for _ in range(101)]
for i in range(0, N):
dp_min[i][i] = int(arr[i * 2])
dp_max[i][i] = int(arr[i * 2])
# ๊ณ์ฐ ๋ฒ์
for calculate_range in range(1, N):
# i: ์์ ํผ์ฐ์ฐ์
for i in range(0, N - calculate_range):
# j: ๋ง์ง๋ง ํผ์ฐ์ฐ์
j = calculate_range + i
for k in range(i, j):
# + ์ฐ์ฐ์
if arr[k*2 + 1] == '+':
dp_max[i][j] = max(dp_max[i][j], dp_max[i][k] + dp_max[k + 1][j])
dp_min[i][j] = min(dp_min[i][j], dp_min[i][k] + dp_min[k + 1][j])
# - ์ฐ์ฐ์
else:
dp_max[i][j] = max(dp_max[i][j], dp_max[i][k] - dp_min[k + 1][j])
dp_min[i][j] = min(dp_min[i][j], dp_min[i][k] - dp_max[k + 1][j])
answer = dp_max[0][N - 1]
return answer
'โญ Problem_Solving > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ณ ๋์ kit - ์์ ํ์ (Python/ํ์ด์ฌ) (0) | 2023.02.07 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ณ ๋์ kit - ์ ๋ ฌ (Python/ํ์ด์ฌ) (0) | 2023.02.05 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ณ ๋์ kit - ํ(Heap) (Python/ํ์ด์ฌ) (0) | 2023.02.04 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ณ ๋์ kit - ์คํ / ํ (0) | 2023.01.16 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ณ ๋์ kit - ํด์ (0) | 2023.01.14 |
๋๊ธ