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

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section08 - 8 - ์ค‘๋ณต์ˆœ์—ด ๊ตฌํ•˜๊ธฐ

YWTechIT 2021. 9. 23. 11:22
728x90

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

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

 

// ์ž…๋ ฅ
3 2

// ์ถœ๋ ฅ
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
9

 

์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ค‘๋ณต์ˆœ์—ด์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” n*n ์ฆ‰, 9๊ฐ€ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ด๋Ÿฐ ์ค‘๋ณต์ˆœ์—ด ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด for๋ฌธ์œผ๋กœ ํ’€๋ฉด ๋” ๊ฐ„๋‹จํ•˜์ง€ ์•Š์„๊นŒ?

let n = 3;
let m = 2;

for (let i=1 ; i<=n; i++){
  for (let j=1; j<=n; j++){
    console.log(i, j)
  }
}

๐Ÿ‘‰๐Ÿฝ
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

 

๋ฌผ๋ก , ์ง€๊ธˆ๊ณผ ๊ฐ™์€ ์ž…๋ ฅ์—์„œ๋Š” ๋‹ต์€ ์ž˜ ๋‚˜์˜จ๋‹ค. ๋งŒ์•ฝ, m์ด 3์ผ๋•Œ(3๊ฐœ ์ค‘ 3๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜)๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ• ๊นŒ? ๊ฒฐ๋ก ์ ์œผ๋กœ ๋งํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€ m์ด ๋Š˜์–ด๋‚  ๋•Œ๋งˆ๋‹ค ๋ฐ˜๋ณต๋ฌธ์˜ ๊ฐœ์ˆ˜๋„ ๋Š˜์–ด๋‚˜์•ผํ•˜๋Š”๋ฐ, ์ผ์ผ์ด m๊ฐœ์”ฉ ๋ฐ˜๋ณต๋ฌธ์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ์ƒ๋‹นํžˆ ๋น„ํšจ์œจ์ ์ธ ์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค. ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์ฒ˜๋Ÿผ ์ž…๋ ฅ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ ์ด๋ ‡๊ฒŒ ํ•˜๋“œ์ฝ”๋”ฉ์„ ํ•  ์ˆ˜๋„ ์—†๋‹ค. ์ด๋Ÿด ๋•Œ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ m๋ฒˆ ๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด ํŽธํ•˜๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. m๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด m๋ ˆ๋ฒจ๋งŒํผ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

 

// ํ•˜๋“œ์ฝ”๋”ฉ
let n = 3;
let m = 3;

for (let i=1 ; i<=n; i++){
  for (let j=1; j<=n; j++){
    for (let k=1; k<=n; k++){
      console.log(i, j, k)
    }
  }
}

๐Ÿ‘‰๐Ÿฝ
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
2 1 1
2 1 2
2 1 3
2 2 1
2 2 2
2 2 3
2 3 1
2 3 2
2 3 3
3 1 1
3 1 2
3 1 3
3 2 1
3 2 2
3 2 3
3 3 1
3 3 2
3 3 3

 

728x90

 

์žฌ๊ท€๋กœ ํ’€ ๋•Œ ์ฃผ์˜ํ•  ์ ์€ ์žฌ๊ท€๋กœ ๋Œ๊ณ  ๋‚˜์„œ ๋‚˜์˜จ arr์˜ ๊ฐ’์ด ๋งˆ์ง€๋ง‰ ๊ฐ’๋งŒ ์ฐธ์กฐํ•˜๋ฏ€๋กœ ์–•์€๋ณต์‚ฌ(slice)๋ฅผ ์ด์šฉํ•ด answer์— pushํ•ด์ฃผ์ž.

 

// ์ •๋‹ต
let n = 3;
let m = 2;

console.log(solution(n, m));

function solution(n, m){
  let arr = Array.from({length: m}, () => 0);
  let cnt=0;
  let answer = [];
  function DFS(L){
    if (L === m){
      answer.push(arr.slice());
      cnt++;
    }else{
      for (let i=1; i<=n; i++){
        arr[L] = i;
        DFS(L+1)
      }   
    }
  }
  DFS(0)
  return [answer, cnt];
}
๋ฐ˜์‘ํ˜•