ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋ฌธ์ ์ค๋ช
N๊ณผ ์ฌ์น์ฐ์ฐ๋ง์ผ๋ก number๋ฅผ ํํํ ์ ์์ ๋, N ์ฌ์ฉ ํ์์ ์ต์๊ฐ ๋ฆฌํดํ๊ธฐ
ex) N=5, number=12
12 = 5+5+(5/5)+(5/5)
12 = 55/5 + 5/5
12 = (55+5)/5 → 3
์ ํ ์ฌํญ
- N์ 1 ์ด์ 9 ์ดํ์ด๋ค.
- number๋ 1 ์ด์ 32,000 ์ดํ์ด๋ค.
- ์์์๋ ๊ดํธ์ ์ฌ์น์ฐ์ฐ๋ง ๊ฐ๋ฅํ๋ฉฐ ๋๋๊ธฐ ์ฐ์ฐ์์ ๋๋จธ์ง๋ ๋ฌด์ํ๋ค.
- ์ต์๊ฐ์ด 8๋ณด๋ค ํฌ๋ฉด -1์ return
๋ฌธ์ ์ ๊ทผ
DP ์ ํ์ด์ด์ ๋์จ ๊ฒฐ๊ณผ์ ๋ํ N์ ์ฌ์ฉํ์๋ฅผ ๋ฃ์ด์ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ ๋ฑ ๊ณ ๋ฏผํ์ง๋ง, ๊ท์น์ด ๋ ์ค๋ฅด์ง ์์ ๋ค๋ฅธ ๋ถ๋ค์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋ค.
DP ๊ท์น์ ์ ์ฐพ์์ผ ํ ์ ์๋ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๋ค.. DP[N์ ์ฌ์ฉ ํ์]๋ก ๊ตฌํด์ ์ ๊ทผํ ์ ์๋ค.
์ ์์ ๋ฅผ ์ด์ฉํด๋ณด๋ฉด,
DP[1] = 5๋ฅผ 1๋ฒ๋ง ์ฌ์ฉ = {5}
๏นก2๊ฐ ์ด์๋ถํฐ๋ 5๋ฅผ ์ด์ด๋ถ์ผ ์ ์๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํ๋ค!
DP[2] = 5๋ฅผ 2๋ฒ ์ฌ์ฉ = {55, 5+5, 5/5, 5*5, 5-5} = {55, DP[1]+DP[1], DP[1]/DP[1], DP[1]*DP[1], DP[1]-DP[1]}
= {55, 10, 1, 25, 0}
DP[3] = 5๋ฅผ 3๋ฒ ์ฌ์ฉ = {555, DP[1]+DP[2], DP[1]/DP[2], DP[1]*DP[2], DP[1]-DP[2], DP[2]+DP[1], DP[2]/DP[1], DP[2]*DP[1], DP[2]-DP[1]} =
{555,
// DP[1] + DP[2]
5+55, 5/55, 5*55, 5-55, 5+10, 5/10, 5*10, 5-10, 5+1, 5/1, 5*1, 5-1, 5+25, 5/25, 5*25, 5-25, 5+0, 5/0, 5*0, 5-0,
// DP[2] + DP[1]
55+5, 55/5, 55*5, 55-5, 10+5, 10/5, 10*5, 10-5, 1+5, 1/5, 1*5, 1-5, 25+5, 25/5, 25*5, 25-5, 0+5, 0/5, 0*5, 0-5}
= {555, 60, 0, 275, -50, 15, 50, -5, 6, -20, 5, 4, 30, 125, INF, 11, 2, -4, 20}
DP[4] = 5๋ฅผ 4๋ฒ ์ฌ์ฉ = {5555, DP[1]+DP[3], DP[1]/DP[3], DP[1]*DP[3], DP[1]-DP[3], DP[2]+DP[2], DP[2]/DP[2], DP[2]*DP[2], DP[2]-DP[2], DP[3]+DP[1], DP[3]/DP[1], DP[3]*DP[1], DP[3]-DP[1]}
์ฆ, ์ ํ์์ ๊ตฌํ๋ฉด DP[i] = {N.repeat(i), DP[1](+,/,*,-)DP[i-1], DP[2](+,/,*,-)DP[i-2], ... , DP[i-1](+,/,*,-)DP[1]}
์ฝ๋
function solution(N, number) {
if(N === number) return 1; // N์ด number์ธ ๊ฒฝ์ฐ ๋ฐ๋ก 1 ๋ฆฌํด
// dp[N์ด ์ฌ์ฉ๋ ํ์] = {์ฌ์ฉ ํ์๋ก ๋ง๋ค ์ ์๋ ์์ ์งํฉ}
const dp = Array.from({length: 9}, () => new Set());
dp[1].add(N); // 1๋ฒ ์ฌ์ฉํ์ฌ ๋ง๋ค ์ ์๋ ์๋ N๋ฐ์ ์์
for(let i=2;i<=8;i++) {
dp[i].add(Number(String(N).repeat(i))); // ์ฌ์น์ฐ์ฐ ์์ด ์ซ์๋ฅผ ์ด์ด ๋ถ์ด๊ธฐ
for(let j=1; j<i;j++) {
for(const num1 of dp[j]) {
for(const num2 of dp[i-j]) {
dp[i].add(num1+num2);
dp[i].add(num1*num2);
dp[i].add(num1-num2);
dp[i].add(Math.floor(num1/num2));
}
}
}
if(dp[i].has(number)) {
return i;
}
}
return -1;
}'์๊ณ ๋ฆฌ์ฆ > ์ฝ๋ฉํ ์คํธ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค-258711] ๋๋๊ณผ ๋ง๋ ๊ทธ๋ํ (0) | 2026.05.27 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค-49191] ์์ (0) | 2026.05.17 |
| [ํ๋ก๊ทธ๋๋จธ์ค-1843] ์ฌ์น์ฐ์ฐ (0) | 2026.05.02 |
| [ํ๋ก๊ทธ๋๋จธ์ค-42860] ์กฐ์ด์คํฑ (0) | 2026.04.27 |
| [๋ฐฑ์ค-35289] ๊ดํธ ๋ฌธ์์ด ์นด๋ (0) | 2026.04.14 |