ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋ฌธ์
์ฌ์น์ฐ์ฐ์์ ๋ํ๊ธฐ(+)๋ ๊ฒฐํฉ๋ฒ์น์ด ์ฑ๋ฆฝํ์ง๋ง, ๋นผ๊ธฐ(-)๋ ๊ฒฐํฉ๋ฒ์น์ด ์ฑ๋ฆฝํ์ง ์๋๋ค. ์ฆ, ๋นผ๊ธฐ๋ ์ฐ์ฐ ์์์ ๋ฐ๋ผ ๊ณ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ค. ๋ฌธ์์ด ํํ์ ์ซ์์, '+', '-'๊ฐ ๋ค์ด์๋ ๋ฐฐ์ด์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์๋ก ๋ค๋ฅธ ์ฐ์ฐ์์์ ๊ณ์ฐ ๊ฒฐ๊ณผ ์ค ์ต๋๋ถ returnํ๋ solution ํจ์ ์์ฑํ๊ธฐ
์ ํ์ฌํญ
- arr๋ ๋ ์ฐ์ฐ์์ ์ซ์๊ฐ ๋ค์ด์๋ ๋ฐฐ์ด์ด๋ฉฐ, ๊ธธ์ด๋ 3 ์ด์ 201 ์ดํ์ด๋ค.
- arr์ ๊ธธ์ด๋ ํญ์ ํ์
- arr์ ๋ค์ด์๋ ์ซ์์ ๊ฐ์๋ 2๊ฐ ์ด์ 101๊ฐ ์ดํ์ด๋ฉฐ, ์ฐ์ฐ์์ ๊ฐ์๋ -1์ด๋ค.
- ์ซ์๋ 1 ์ด์ 1,000 ์ดํ์ ์์ฐ์๊ฐ ๋ฌธ์์ด ํํ๋ก ๋ค์ด์๋ค
- ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์๋ ๋ฐ๋์ ์ซ์์ด๋ฉฐ, ์ซ์์ ์ฐ์ฐ์๊ฐ ํญ์ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ๋ค์ด์๋ค.
์ ์ถ๋ ฅ ์์
arr = ["1", "-", "3", "+", "5", "-", "8"], result = 1
arr = ["5", "-", "3", "+", "1", "+", "2", "-", "4"], result = 3
๋ฌธ์ ์ ๊ทผ
DFS๋ก ํ๊ธฐ์๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ ๋ฏํ ๋ฌธ์ ์ธ ๋ฏํ๊ณ , DP๋ก ์ ๊ทผํ๊ธฐ์ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ด์ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ์ฐธ๊ณ ํด์ ํ์๋ค..ใ
์ด ๋ฌธ์ ๋ ๋ ๊ฐ์ง DP ๋ฐฐ์ด์ด ํ์ํ๋ค. ์ต๋๊ฐ DP์ ์ต์๊ฐ DP
DP[i][j] = i๋ฒ์งธ๋ถํฐ j๋ฒ์งธ๊น์ง์ ์ฐ์ฐ ๊ฒฐ๊ณผ
๋ํ, ์ฐ์ฐ์๊ฐ '+'์ธ ๊ฒฝ์ฐ์ '-'์ธ ๊ฒฝ์ฐ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๊ฐฑ์ ์์ผ์ฃผ๋ ์ฐ์ฐ์ด ๋ค๋ฅด๋ค.
1) +์ธ ๊ฒฝ์ฐ
- ์ต๋ = ์ต๋ + ์ต๋
- ์ต์ = ์ต์ + ์ต์
2) -์ธ ๊ฒฝ์ฐ
- ์ต๋ = ์ต๋ - ์ต์
- ์ต์ = ์ต์ - ์ต๋
์ ๋ด์ฉ์ ํ ๋๋ก ์์๋ฅผ ๊ทผ๊ฑฐ๋ก ์ ๊ทผํด๋ณด๋ฉด,
| 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| 1 | - | 3 | + | 5 | - | 8 |
1. ์ฒ์์ ๋ณธ์ธ ์์ , ์ฆ i๋ฒ์งธ-i๋ฒ์งธ๋ ํด๋น ์ซ์ ์ฑ์ฐ๊ธฐ(min_dp, max_dp)
min_dp
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | |
| 0 | 1 | x | x | x | |||
| 1 | x | x | x | x | x | x | x |
| 2 | x | 3 | x | x | |||
| 3 | x | x | x | x | x | x | x |
| 4 | x | x | 5 | x | |||
| 5 | x | x | x | x | x | x | x |
| 6 | x | x | x | 8 |
max_dp
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | |
| 0 | 1 | x | x | x | |||
| 1 | x | x | x | x | x | x | x |
| 2 | x | x | 3 | x | x | ||
| 3 | x | x | x | x | x | x | x |
| 4 | x | x | x | x | 5 | x | |
| 5 | x | x | x | x | x | x | x |
| 6 | x | x | x | x | x | x | 8 |
2. 3์๋ฆฌ๋ถํฐ arr ๋ฐฐ์ด ๊ธธ์ด ์๋ฆฌ๊น์ง ์ฌ์น์ฐ์ฐ ๊ณ์ฐ
2-1) 3์๋ฆฌ์ฉ ๋จผ์ ํ์ธ -> 1-3, 3+5, 5-8
min_dp
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | |
| 0 | 1 | x | -2 | x | x | ||
| 1 | x | x | x | x | x | x | x |
| 2 | x | x | 3 | x | 8 | x | |
| 3 | x | x | x | x | x | x | x |
| 4 | x | x | x | x | 5 | x | -3 |
| 5 | x | x | x | x | x | x | x |
| 6 | x | x | x | x | x | x | 8 |
max_dp
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | |
| 0 | 1 | x | -2 | x | x | ||
| 1 | x | x | x | x | x | x | x |
| 2 | x | x | 3 | x | 8 | x | |
| 3 | x | x | x | x | x | x | x |
| 4 | x | x | x | x | 5 | x | -3 |
| 5 | x | x | x | x | x | x | x |
| 6 | x | x | x | x | x | x | 8 |
2-2) 3์๋ฆฌ์ฉ ํ์ธ -> 1-3+5, 3+5-8 -> 1-(3+5) or (1-3)+5 / 3+(5-8) or (3+5)-8
min_dp
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | |
| 0 | 1 | x | -2 | x | -7 | x | |
| 1 | x | x | x | x | x | x | x |
| 2 | x | x | 3 | x | 8 | x | 0 |
| 3 | x | x | x | x | x | x | x |
| 4 | x | x | x | x | 5 | x | -3 |
| 5 | x | x | x | x | x | x | x |
| 6 | x | x | x | x | x | x | 8 |
max_dp
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | |
| 0 | 1 | x | -2 | x | 3 | x | |
| 1 | x | x | x | x | x | x | x |
| 2 | x | x | 3 | x | 8 | x | 0 |
| 3 | x | x | x | x | x | x | x |
| 4 | x | x | x | x | 5 | x | -3 |
| 5 | x | x | x | x | x | x | x |
| 6 | x | x | x | x | x | x | 8 |
2-3) 4์๋ฆฌ์ฉ ํ์ธ -> 1-3+5-8 -> 1-(3+5-8) or (1-3)+(5-8) or (1-3+5)-8
min_dp
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | |
| 0 | 1 | x | -2 | x | -7 | x | -15 |
| 1 | x | x | x | x | x | x | x |
| 2 | x | x | 3 | x | 8 | x | 0 |
| 3 | x | x | x | x | x | x | x |
| 4 | x | x | x | x | 5 | x | -3 |
| 5 | x | x | x | x | x | x | x |
| 6 | x | x | x | x | x | x | 8 |
max_dp
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | |
| 0 | 1 | x | -2 | x | 3 | x | 1 |
| 1 | x | x | x | x | x | x | x |
| 2 | x | x | 3 | x | 8 | x | 0 |
| 3 | x | x | x | x | x | x | x |
| 4 | x | x | x | x | 5 | x | -3 |
| 5 | x | x | x | x | x | x | x |
| 6 | x | x | x | x | x | x | 8 |
3) ์ต์ข ์ ์ผ๋ก max_dp[0][arr๋ฐฐ์ด ๊ธธ์ด-1] ๋ฆฌํด
์ฝ๋
function solution(arr) {
var answer = -1;
const len = arr.length;
// DP[i][j] = i๋ฒ์งธ๋ถํฐ j๋ฒ์งธ๊น์ง์ ์ฐ์ฐ
const max_dp = Array.from({length: len}, () => Array.from({length: len}, () => 0)); // ์ต๋๊ฐ DP
const min_dp = Array.from({length: len}, () => Array.from({length: len}, () => Number.MAX_SAFE_INTEGER)); // ์ต์๊ฐ DP
// DP[i][i] = ๋ณธ์ธ ์์ ์ ๊ทธ๋๋ก์
for(let i=0; i<arr.length; i+=2) {
max_dp[i][i] = +arr[i];
min_dp[i][i] = +arr[i];
}
for(let count=3; count<len+1;count+=2){
for(let left=0; left<len-2; left+=2){
let right = left+count-1;
if(right >= len) break;
const candidates = [];
for(let operation=left+1; operation<right; operation+=2) {
if(arr[operation] === '+') {
// ์ต๋ = ์ต๋+์ต๋
candidates.push(max_dp[left][operation-1]+max_dp[operation+1][right]);
// ์ต์ = ์ต์+์ต์
candidates.push(min_dp[left][operation-1]+min_dp[operation+1][right]);
}else {
// ์ต๋ = ์ต๋-์ต์
candidates.push(max_dp[left][operation-1]-min_dp[operation+1][right]);
// ์ต์ = ์ต์-์ต๋
candidates.push(min_dp[left][operation-1]-max_dp[operation+1][right]);
}
}
max_dp[left][right] = Math.max(...candidates);
min_dp[left][right] = Math.min(...candidates);
}
}
return max_dp[0][len-1];
}'์๊ณ ๋ฆฌ์ฆ > ์ฝ๋ฉํ ์คํธ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค-258711] ๋๋๊ณผ ๋ง๋ ๊ทธ๋ํ (0) | 2026.05.27 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค-49191] ์์ (0) | 2026.05.17 |
| [ํ๋ก๊ทธ๋๋จธ์ค-42895] N์ผ๋ก ํํ (0) | 2026.04.30 |
| [ํ๋ก๊ทธ๋๋จธ์ค-42860] ์กฐ์ด์คํฑ (0) | 2026.04.27 |
| [๋ฐฑ์ค-35289] ๊ดํธ ๋ฌธ์์ด ์นด๋ (0) | 2026.04.14 |