Jieunny์˜ ๋ธ”๋กœ๊ทธ

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์‚ผ์ด์‚ฌ (์กฐํ•ฉ ํ’€์ด๊ณผ์ •) ๋ณธ๋ฌธ

Study/Coding Test

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์‚ผ์ด์‚ฌ (์กฐํ•ฉ ํ’€์ด๊ณผ์ •)

Jieunny 2023. 1. 18. 13:33

๐Ÿ“ฃ  ๋ฌธ์ œ ํ’€์ด์— ์•ž์„œ 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 ++ ํ•ด์ฃผ๊ธฐ.