[JS] νλ‘κ·Έλλ¨Έμ€ - μΌμ΄μ¬ (μ‘°ν© νμ΄κ³Όμ )
π£ λ¬Έμ νμ΄μ μμ JSλ‘ μ‘°ν©μ ꡬννλ κ³Όμ μ μμ보μ.
βοΈ μ‘°ν© : μλ‘ λ€λ₯Έ nκ°μ 물건μμ μμλ₯Ό μκ°νμ§ μκ³ rκ°λ₯Ό ννλ κ² => nCr
βοΈ κ΅¬ν κ³Όμ : λ°°μ΄μ μ²μ μμλΆν° νλμ© κ³ μ νκ³ , κ³ μ λ μμλ₯Ό μ μΈν μμλ€ μ€μμ r-1κ°λ₯Ό μ‘°ν©ν΄μ λΆμ΄λ λ°©λ²
βοΈ μ¬κ·μ μΌλ‘ νΈλ κ² μ’λ€-> μ‘°ν©μ ꡬνλ κ³Όμ μ κ³μ λ°λ³΅λκΈ° λλ¬Έμ!
π λ¬Έμ
νκ΅μ€νκ΅μ λ€λλ νμλ€μ κ°μ μ μ λ²νΈλ₯Ό κ°κ³ μμ΅λλ€. μ΄ νκ΅ νμ 3λͺ μ μ μ λ²νΈλ₯Ό λνμ λ 0μ΄ λλ©΄ 3λͺ μ νμμ μΌμ΄μ¬λΌκ³ ν©λλ€. μλ₯Ό λ€μ΄, 5λͺ μ νμμ΄ μκ³ , κ°κ°μ μ μ λ²νΈκ° μμλλ‘ -2, 3, 0, 2, -5μΌ λ, 첫 λ²μ§Έ, μΈ λ²μ§Έ, λ€ λ²μ§Έ νμμ μ μ λ²νΈλ₯Ό λνλ©΄ 0μ΄λ―λ‘ μΈ νμμ μΌμ΄μ¬μ λλ€. λν, λ λ²μ§Έ, λ€ λ²μ§Έ, λ€μ― λ²μ§Έ νμμ μ μ λ²νΈλ₯Ό λν΄λ 0μ΄λ―λ‘ μΈ νμλ μΌμ΄μ¬μ λλ€. λ°λΌμ μ΄ κ²½μ° νκ΅μ€νκ΅μμλ λ κ°μ§ λ°©λ²μΌλ‘ μΌμ΄μ¬λ₯Ό λ§λ€ μ μμ΅λλ€.
νκ΅μ€νκ΅ νμλ€μ λ²νΈλ₯Ό λνλ΄λ μ μ λ°°μ΄ numberκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, νμλ€ μ€ μΌμ΄μ¬λ₯Ό λ§λ€ μ μλ λ°©λ²μ μλ₯Ό return νλλ‘ solution ν¨μλ₯Ό μμ±νμΈμ.
βοΈ νμ΄
function solution(number) {
let noOverlap = [];
let result = 0;
for(let i=0; i<number.length; i++){
if(noOverlap.includes(number[i]) === false){
noOverlap.push(number[i]);
}
}
let combinations = getCombinations(number, 3);
for(let i=0; i<combinations.length; i++){
let sum = 0;
for(let j=0; j<combinations[i].length; j++){
sum += combinations[i][j];
}
if(sum === 0){
result++;
}
}
return result;
}
const getCombinations = function (n, r) {
const results = [];
if (r === 1){
return n.map((el) => [el]);
}
n.forEach((fixed, index, origin) => {
const rest = origin.slice(index + 1);
const combinations = getCombinations(rest, r - 1);
const attached = combinations.map((el) => [fixed, ...el]);
results.push(...attached);
});
return results;
}
β° λ°λ³΅λλ μλ μμ΄μΌ νλκΉ μΌλ¨ λ°μ λ°°μ΄μμ μ€λ³΅λλ μ«μ μ κ±°ν΄μ noOverlap λ°°μ΄ λ§λ€μ΄μ£ΌκΈ°.
β° noOverlap λ°°μ΄μ getCombinations() ν¨μ μΈμλ‘ μ€μ 3κ° μ‘°ν© κ΅¬νκΈ°.
Ⱐꡬν μ‘°ν©μμ κ°κ° λ°°μ΄ μμ λνμ λ 0 μ΄λλ©΄ μ΅μ’ λ΅μΈ result ++ ν΄μ£ΌκΈ°.