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

[JavaScript/section 8] 08 - ์ค‘๋ณต์ˆœ์—ด ๊ตฌํ•˜๊ธฐ

_์„ฑํ˜ธ_ 2022. 10. 30. 01:58
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ 08 - ์ค‘๋ณต์ˆœ์—ด ๊ตฌํ•˜๊ธฐ

1๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ์ ํžŒ ๊ตฌ์Šฌ์ด ์žˆ๋‹ค. ์ด ์ค‘ ์ค‘๋ณต์„ ํ—ˆ๋ฝํ•˜์—ฌ M๋ฒˆ์„ ๋ฝ‘์•„ ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. 

์ž…๋ ฅ์˜ˆ์ œ
3 2
์ถœ๋ ฅ์˜ˆ์ œ
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

์žฌ๊ท€๋ฅผ ์•Œ์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ์ด์ค‘ for ๋ฌธ(๋ฝ‘๋Š” ํšŸ์ˆ˜ 2๋ฒˆ)์„ ์ด์šฉํ•ด ํ’€์—ˆ์„ ๊ฒƒ์ด๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๋‹ค์ค‘ for ๋ฌธ๊ณผ ์žฌ๊ท€๋Š” ๊ฐ™๋‹ค๊ณ  ํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์™œ ๋” ๊ฐ„๋‹จํ•œ ์ด์ค‘ for ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์žฌ๊ท€๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ํ• ๊นŒ ํ•˜๋Š” ์˜๋ฌธ์ด ์ƒ๊ธด๋‹ค..๐Ÿค” 

 

for ๋ฌธ์„ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•

function solution(n) {
  let answer = [];

  for (let i = 1; i <= n; i++) {
    for (let j = 1; j <= n; j++) {
      answer.push([i, j]);
    }
  }

  return answer;
}

console.log(solution(3));

์ด์ค‘ for ๋ฌธ์„ ์ด์šฉํ•ด ํ’€์–ด๋ณด์•˜๋‹คโ— ์‹คํ–‰ํ•ด๋ณด๋ฉด ์žฌ๊ท€๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋ฝ‘๋Š” ํšŸ์ˆ˜๊ฐ€ 3๋ฒˆ์ด๋ผ๋ฉดโ“

function solution(n) {
  let answer = [];

  for (let i = 1; i <= n; i++) {
    for (let j = 1; j <= n; j++) {
      for (let k = 1; k <= n; k++) {
        answer.push([i, j, k]);
      }
    }
  }

  return answer;
}

console.log(solution(3));

๐Ÿ˜ต ๋ฝ‘๋Š” ํšŸ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก for ๋ฌธ๋„ ๊ฐ™์ด ๋Š˜์–ด๋‚˜ ์ฝ”๋“œ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๋‹ค. ์ž์ฃผ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ์ฝ”๋“œ๋Š” ์ข‹์ง€ ๋ชปํ•œ ์ฝ”๋“œ์ด๋‹ค. ๋ฐ˜๋ฉด์— ์žฌ๊ท€๋ฅผ ์ด์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ถˆํŽธํ•จ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ‘ ์žฌ๊ท€๋ฅผ ์ด์šฉํ•œ ํ’€์ด ๋ฐฉ๋ฒ•

์žฌ๊ท€๋ฅผ ๋Œ๋ฉด์„œ L(ํŠธ๋ฆฌ ๋ ˆ๋ฒจ)์ด m(๋ฝ‘๋Š” ํšŸ์ˆ˜)๊ณผ ๊ฐ™๋‹ค๋ฉด ํ•˜๋‚˜์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์™„์„ฑ๋œ ๊ฒƒ์ด๋ฏ€๋กœ tmp๋ฅผ ์–•์€ ๋ณต์‚ฌ(slice) ํ•˜์—ฌ answer ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•œ๋‹ค. tmp๋ฅผ answer ๋ฐฐ์—ด์— ๋ฐ”๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’๋“ค์ด ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฏ€๋กœ ๋งˆ์ง€๋ง‰ ๊ฐ’์ธ [3, 3] ๊ฐ’๋งŒ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.

function solution(n, m) {
  let answer = [];
  let tmp = Array.from({ length: m }, () => 0);

  function DFS(L) {
    if (L === m) {
      answer.push(tmp.slice());
    } else {
      for (let i = 1; i <= n; i++) {
        tmp[L] = i;
        DFS(L + 1);
      }
    }
  }
  DFS(0);

  return answer;
}

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