ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
๋จผ์ ํด๋น ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ํ์ค์นผ์ ์ผ๊ฐํ์ ์คํํ ๊ฒฐ๊ณผ๊ฐ์ด ์ดํญ๊ณ์๋ฅผ ์ด์ฉํด ๊ณ์ฐํ ์ต์ข ๊ฐ๊ณผ ๊ฐ์์ ์์์ผ ํ๋ค.
๋ค์ ๊ทธ๋ฆผ์์ ๋ณธ ๋ฐ์ ๊ฐ์ด ํ์ค์นผ์ ์ผ๊ฐํ์ ์คํํ ๊ฒฐ๊ณผ ๊ฐ์ (1 × 1) + (2 × 3) + (3 × 3) + (4 × 1)์ด๋ฉฐ N์ด 4์ผ ๊ฒฝ์ฐ์ ์์ด ์์๊ฐ ์ด๋ป๋ ๊ฐ์ {1 3 3 1}์ ๋ฒ์ ๋ด์์ ๊ฒฐ๊ณผ๊ฐ์ด ์ฐ์ถ๋๋ค.
๋ํ ์ด๋ฅผ ์ข ๋ ๊ตฌํ๊ธฐ ํธํ ์ดํญ ๊ณ์๋ก ํํํ๋ค๋ฉด 3C0 3C1 3C2 3C3๋ก ๋ฐ๊ฟ ์ ์๋ค.
{1 3 3 1}์ ์ดํญ ๊ณ์๋ก ๊ตฌํด๋์ง ์์ ๊ฒฝ์ฐ ์์ด์ ๊ตฌํ ๋๋ง๋ค ๋งค๋ฒ ํ์ค์นผ์ ์ผ๊ฐํ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋๋ฐ ์ด๋ ์๊ฐ ๋ณต์ก๋ ์ ๋งค์ฐ ๋นํจ์จ์ ์ด๋ค.
์ฝ๋
function solution(n, f) {
let answer = [];
let flag = 0;
let dy = Array.from(Array(11), () => Array(30).fill(0));
let ch = Array.from({length: n + 1}, () => 0);
let p = Array.from({length: n}, () => 0);
let b = Array.from({length: n}, () => 0);
function combi(n, r) { //ํ์ค์นผ์ ์ผ๊ฐํ์ ๋ํ ์ดํญ๊ณ์ ๊ฐ์ ์ฌ์ ์ ๋จผ์ ๊ตฌํด๋๋ค.
if(dy[n][r] > 0) return dy[n][r];
if(n === r || r === 0) return 1;
else return dy[n][r] = 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+(b[L] * p[L])); //{1, 3, 3, 1} * {1, 2, 3, 4}, {2, 1, 3, 4} ...
ch[i] = 0;
}
}
}
}
for(let i = 0; i < n; i++) {
b[i] = combi(n - 1, i);
}
DFS(0, 0);
return answer;
}
console.log(solution(4, 16));
'์๊ณ ๋ฆฌ์ฆ > ํ๊ทธ ๋ณ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ธ์ ๋ฆฌ์คํธ]๊ฒฝ๋ก ํ์ (0) | 2021.08.11 |
---|---|
[์ธ์ ํ๋ ฌ]๊ฒฝ๋ก ํ์ (0) | 2021.08.09 |
ํน์ ๊ฐ์ ๋ง์กฑํ๋ ์กฐํฉ ๊ตฌํ๊ธฐ(ps.ํ์ด์ฌ์ ์์..) (0) | 2021.08.08 |
[๋ฉ๋ชจ์ด์ ์ด์ ]์กฐํฉ์ ๊ฒฝ์ฐ์ (0) | 2021.08.07 |
์์ด ๊ตฌํ๊ธฐ (0) | 2021.08.07 |
๋๊ธ