1~N κΉμ§μ μλ₯Ό
1 2 3 4
3 5 7
8 12
20
μ μ κ°μ ννλ‘ κ·Έλ €λκ°λ€κ³ ν λ, κ°μ₯ μλμ μ«μ F μ 1~N μ N μ μ£Όμ΄μ§λ κ°μ₯ μ²«λ¨ (μμλ‘λ 1234) μ μμΈ‘νλ λ¬Έμ λ₯Ό νμ΄λ³΄μλ€.
μ²μμλ 1~NκΉμ§μ μμ΄μ μ μ₯νμ¬, κ°κ° μ λΆ νμ€μΉΌ μΌκ°νμ ννλ‘ μμ κ°μ΄ κ³μ°ν΄ λ΄λ €κ°ν Fμ λ§λκ²μ μ°Ύκ³ μ νμλ€. κ·Έλ κ² λλ€λ©΄, λ무 μκ°λ³΅μ‘λκ° λμμ§κΈ°λλ¬Έμ μ΄νκ³μλ₯Ό μ¬μ©νμ¬ λ¬Έμ λ₯Ό νμ΄λ³΄μλ€.
μΌλ¨ μ΄λ¬Έμ λ μ΄νκ³μλ₯Ό νμ©νλ©΄, 첫λ¨μ μ€λ§ μμμμΌλ©΄ λ°λ‘ ν©κ³λ₯Ό ꡬν μμλ€.
μμ μ¬μ§μ²λΌ Nμ λ°λΌ κ° μ²«λ¨μ λ°°μ΄μ κ°μλ
,,β¦,
μ΄ λλ€.
κ·ΈλΌ μ²«λ¨μ΄ μ£Όμ΄μ§λ ν©κ³λ
Arr[0]+Arr[1]+β¦+Arr[N-1]* μ΄ λλ€.
μ΄λ₯Ό νμ©νμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν΄ λκ°λ€.
function solution(n, f) {
let answer = [];
let firstArrayFlag = 0;
let dy = Array.from(Array(11), () => Array(11).fill(0));
let visited = Array.from({ length: n + 1 }, (v) => 0);
let numArr = Array.from({ length: n }, (v) => 0);
let calNumArr = Array.from({ length: n }, (v) => 0);
function combination(n, r) {
if (dy[n][r] > 0) return dy[n][r];
if (r === 0 || n === r) {
return 1;
} else {
return (dy[n][r] = combination(n - 1, r - 1) + combination(n - 1, r));
}
}
for (let i = 0; i < n; i++) {
calNumArr[i] = combination(n - 1, i);
}
function DFS(level, sum) {
if (firstArrayFlag) {
return;
}
if (level === n && sum === f) {
answer = [...numArr];
firstArrayFlag = 1;
} else {
for (let i = 1; i <= n; i++) {
if (visited[i] === 0) {
visited[i] = 1;
numArr[level] = i;
DFS(level + 1, sum + calNumArr[level] * numArr[level]);
visited[i] = 0;
}
}
}
}
DFS(0, 0);
return answer;
}
console.log(solution(4, 16));