๐ 13 - ์์ด ์ถ์ธกํ๊ธฐ
๊ฐ์ฅ ์์ค์ 1๋ถํฐ N๊น์ง์ ์ซ์๊ฐ ํ ๊ฐ์ฉ ์ ํ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋์งธ ์ค๋ถํฐ ์ฐจ๋ก๋๋ก ํ์ค์นผ์ ์ผ๊ฐํ์ฒ๋ผ ์์ ๋ ๊ฐ๋ฅผ ๋ํ ๊ฐ์ด ์ ์ฅ๋๊ฒ ๋๋ค. ์๋ฅผ ๋ค์ด N์ด 4์ด๊ณ ๊ฐ์ฅ ์์ค์ 3 1 2 4๊ฐ ์๋ค๊ณ ํ์ ๋, ๋ค์๊ณผ ๊ฐ์ ์ผ๊ฐํ์ด ๊ทธ๋ ค์ง๋ค.
N๊ณผ ๊ฐ์ฅ ๋ฐ์ ์๋ ์ซ์๊ฐ ์ฃผ์ด์ ธ ์์ ๋ ๊ฐ์ฅ ์์ค์ ์๋ ์ซ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ๋จ, ๋ต์ด ์ฌ๋ฌ๊ฐ์ง๊ฐ ๋์ค๋ ๊ฒฝ์ฐ์๋ ์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ์์ ์ค๋ ๊ฒ์ ์ถ๋ ฅํด์ผ ํ๋ค.
์
๋ ฅ์์
4 16
์ถ๋ ฅ์์
3 1 2 4
์ด๋ฒ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ๋จผ์ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ์์์ผํ๋ค.
๋นจ๊ฐ ์๊ณผ ๊ฐ์ด ์์ด์ ์ฒซ ๋ฒ์งธ ๋ถํฐ ๋ง์ง๋ง ์ซ์๊น์ง ์ฐจ๋ก๋๋ก n-1C0, n-1C1, n-1C2, n-1C3๋ฒ ๋ํด์ง ๊ฒ์ ์ ์ ์๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ์์ด ๊ตฌํ๊ธฐ์ ์กฐํฉ์ ๊ฒฝ์ฐ ์ ๋ฌธ์ ๋ฅผ ์์ฉํ ๋ฌธ์ ์ด๋ค.
๐ ํ์ด ๋ฐฉ๋ฒ
- ์ ๊ท์น์ ๋ฐ๋ผ ์กฐํฉ ์๋ฅผ c ๋ฐฐ์ด์ ๋ฏธ๋ฆฌ ์ ์ฅํ๋ค.
- ์ฌ๊ท๋ฅผ ๋๋ฉด์(์์ด์ ๊ตฌํ๋ ๊ณผ์ ) ์ซ์๋ฅผ ํ๋์ฉ ์ ํํ ๋๋ง๋ค sum์ p[L] * c[L]์ ๋ํด์ค๋ค.
- L(๋ ๋ฒจ)๊ณผ n์ด ๊ฐ๊ณ sum(์ผ๊ฐํ์์ ๊ฐ์ฅ ๋ฐ์ ์๋ ์ซ์)๊ณผ f๊ฐ ๊ฐ๋ค๋ฉด ํ๋์ ๋ต์ด ์์ฑ๋ ๊ฒ์ด๋ฏ๋ก p ๋ฐฐ์ด์ ์์ ๋ณต์ฌํ์ฌ answer์ ํ ๋นํด์ค๋ค.
- ์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ์์ ์ค๋ ๊ฒ์ ์ถ๋ ฅํด์ผํ๊ธฐ ๋๋ฌธ์ ํ๋์ ๋ต์ด ์์ฑ๋๋ฉด flag์ 1์ ํ ๋นํ์ฌ ๋๋จธ์ง๋ฅผ ๋ชจ๋ returnํ๋ค.
function solution(n, f) {
let answer,
flag = 0;
const dy = Array.from(Array(11), () => Array(11).fill(0));
const ch = Array.from({ length: n + 1 }, () => 0);
const p = Array.from({ length: n }, () => 0);
const c = Array.from({ length: n }, () => 0);
function combi(n, r) {
if (dy[n][r] > 0) return dy[n][r];
if (r === 0 || n === r) return 1;
else return combi(n - 1, r - 1) + combi(n - 1, r);
}
function DFS(L, sum) {
if (flag) return;
if (L === n && sum === f) {
answer = p.slice();
flag = 1;
} else {
for (let i = 1; i <= n; i++) {
if (ch[i] === 0) {
ch[i] = 1;
p[L] = i;
DFS(L + 1, sum + p[L] * c[L]);
ch[i] = 0;
}
}
}
}
for (let i = 0; i < n; i++) {
c[i] = combi(n - 1, i);
}
DFS(0, 0);
answer = answer.join(' ');
return answer;
}
console.log(solution(4, 16));
'Algorithm > ์ธํ๋ฐ(inflearn)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/section 8] 15 - ์๋ค์ ์กฐํฉ (0) | 2022.11.14 |
---|---|
[JavaScript/section 8] 14 - ์กฐํฉ ๊ตฌํ๊ธฐ (0) | 2022.11.12 |
[JavaScript/section 8] 12 - ์กฐํฉ์ ๊ฒฝ์ฐ ์ (0) | 2022.11.08 |
[JavaScript/section 8] 11 - ํฉํ ๋ฆฌ์ผ (0) | 2022.11.07 |
[JavaScript/section 8] 10 - ์์ด ๊ตฌํ๊ธฐ (0) | 2022.11.06 |