Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[JavaScript/section 8] 12 - ์กฐํ•ฉ์˜ ๊ฒฝ์šฐ ์ˆ˜

_์„ฑํ˜ธ_ 2022. 11. 8. 16:01
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ 12 - ์กฐํ•ฉ์˜ ๊ฒฝ์šฐ ์ˆ˜(๋ฉ”๋ชจ์ด์ œ์ด์…˜)

nCr = n! / (n - r)!r! ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ณต์‹์„ ์“ฐ์ง€ ์•Š๊ณ  ๋‹ค์Œ ๊ณต์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์žฌ๊ท€๋ฅผ ์ด์šฉํ•ด ์กฐํ•ฉ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์ž…๋ ฅ์„ค๋ช…
์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ n(3<=n<=33)๊ณผ r(0<=r<=n)์ด ์ž…๋ ฅ๋œ๋‹ค.
์ถœ๋ ฅ์„ค๋ช…
์ฒซ์งธ ์ค„์— ์กฐํ•ฉ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…๋ ฅ์˜ˆ์ œ 1
5 3
์ถœ๋ ฅ์˜ˆ์ œ 1
10

์ž…๋ ฅ์˜ˆ์ œ 2
33 19
์ถœ๋ ฅ์˜ˆ์ œ 2
818809200


์กฐํ•ฉ์˜ ํŠน์ง•
๋จผ์ € ์กฐํ•ฉ์ด๋ž€โ“ ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๋Š” ์–ด๋–ค ์ง‘ํ•ฉ์—์„œ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด r๊ฐœ์˜ ์›์†Œ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ
ex 1) n = 3, r = 3
1๏ธโƒฃ 3๊ฐœ ์ค‘์—์„œ 3๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 1๊ฐ€์ง€์ด๋ฏ€๋กœ n๊ณผ r์ด ๊ฐ™์„ ๊ฒฝ์šฐ์˜ ์กฐํ•ฉ ์ˆ˜๋Š” 1์ด๋‹ค.
ex 2) n = 3, r = 0
2๏ธโƒฃ 3๊ฐœ ์ค‘์—์„œ 0๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 1๊ฐ€์ง€์ด๋ฏ€๋กœ r์ด 0์ผ ๊ฒฝ์šฐ์˜ ์กฐํ•ฉ ์ˆ˜๋Š” 1์ด๋‹ค.

๐Ÿค” ๋‚˜์˜ ํ’€์ด ๋ฐฉ๋ฒ•
๊ณต์‹ ๊ทธ๋Œ€๋กœ ์žฌ๊ท€๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ œ ํ•ด๊ฒฐ.. ํ•˜์ง€๋งŒ n๊ณผ r์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์†๋„๊ฐ€ ๋งŽ์ด ๋Š๋ ค์ง€๋Š” ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•œ๋‹ค.

  • ์กฐํ•ฉ์˜ ํŠน์ง•์— ์˜ํ•ด r์ด 0์ด๊ฑฐ๋‚˜ n๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ 1์„ return ํ•œ๋‹ค.
function solution(n, r) {
  let answer;

  function DFS(n, r) {
    if (r === 0 || n === r) return 1;
    else return DFS(n - 1, r - 1) + DFS(n - 1, r));
  }

  answer = DFS(n, r);
  return answer;
}

console.log(solution(33, 19));


๐Ÿ‘ ๊ฐ•์‚ฌ๋‹˜ ํ’€์ด ๋ฐฉ๋ฒ•
๊ฐ•์‚ฌ๋‹˜์€ ์†๋„๊ฐ€ ๋Š๋ ค์ง€๋Š” ๋ฌธ์ œ์ ์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์ด์šฉํ•ด ํ•ด๊ฒฐ๐Ÿ˜Š 2์ฐจ์› ๋ฐฐ์—ด์— n๊ณผ r์— ๋Œ€ํ•œ ์กฐํ•ฉ ์ˆ˜๋ฅผ ์ €์žฅํ•ด๋†“๊ณ  ์žฌ๊ท€๋ฅผ ๋Œ๋ฉด์„œ n๊ณผ r์— ๋Œ€ํ•œ ์กฐํ•ฉ ์ˆ˜๊ฐ€ ๋ฐฐ์—ด์— ์ด๋ฏธ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๋ฉด ์žฌ๊ท€๋ฅผ ๋ฉˆ์ถ”๊ณ  ๋ฐฐ์—ด์—์„œ ํ•ด๋‹น ์กฐํ•ฉ ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋‹ค์Œ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์ดํ•ดํ•˜๊ธฐ ์ˆ˜์›”ํ•  ๊ฒƒ์ด๋‹คโ—

ํŒŒ๋ž€์ƒ‰์„ ๋ณด๋ฉด n์ด 2์ด๊ณ  r์ด 1์ธ ๊ฒฝ์šฐ๊ฐ€ ์ด๋ฏธ ์•ž์—์„œ ํ•œ ๋ฒˆ ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์˜ n ํ–‰ r ์—ด์— ์กฐํ•ฉ ์ˆ˜๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋” ์ด์ƒ ์žฌ๊ท€๋ฅผ ๋Œ์ง€ ์•Š๊ณ  ๋ฐฐ์—ด์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ฉด ์†๋„ ์ธก๋ฉด์—์„œ ๋งŽ์ด ํ–ฅ์ƒ๋œ๋‹ค.

function solution(n, r) {
  let answer;
  let dy = Array.from(Array(35), () => Array(35).fill(0));

  function DFS(n, r) {
    if (dy[n][r] > 0) return dy[n][r];
    if (r === 0 || n === r) return 1;
    else return (dy[n][r] = DFS(n - 1, r - 1) + DFS(n - 1, r));
  }

  answer = DFS(n, r);
  return answer;
}

console.log(solution(5, 3));