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

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

YWTechIT 2021. 9. 26. 08:54
728x90

๐Ÿ“ section08 - 10 - ์ˆœ์—ด๊ตฌํ•˜๊ธฐ

๋ฌธ์ œ: 10 ์ดํ•˜์˜ N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ด ์ค‘ M๊ฐœ๋ฅผ ๋ฝ‘์•„ ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜๋ผ.(์ค‘๋ณต์€ ํ—ˆ๋ฝํ•˜์ง€ ์•Š๋Š”๋‹ค.)

// ์ž…๋ ฅ
3 2
3 6 9

// ์ถœ๋ ฅ
3 6
3 9
6 3
6 9
9 3
9 6

 

์ด์ „์— ํ’€์—ˆ๋˜ ์ค‘๋ณต์„ ํ—ˆ๋ฝํ•˜์—ฌ ์ˆœ์—ด ๊ตฌํ•˜๊ธฐ์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ์ด์ง€๋งŒ ์ด๋ฒˆ์—” ์ค‘๋ณต์„ ํ—ˆ๋ฝํ•˜์ง€ ์•Š๋Š” ์กฐ๊ฑด์—์„œ ํ‘ธ๋Š” ๋ฌธ์ œ๋‹ค. ์ค‘๋ณต์„ ํ—ˆ๋ฝํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ „์ฒด ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 3*2=6์ด๋‹ค. ํ•ต์‹ฌ ํฌ์ธํŠธ๋Š” visited ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜์—ฌ ์ด์ „์— ๋ฐฉ๋ฌธํ–ˆ๋˜ index๋Š” ์ œ์™ธํ•˜๊ณ  ๋ฐฉ๋ฌธํ•˜๋ฉด ์ค‘๋ณต๋˜์ง€ ์•Š์€ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค. ๋˜ํ•œ, ๋ฐฉ๋ฌธํ•˜๊ณ  ๋‹ค์‹œ ์˜ฌ๋ผ๊ฐˆ ๋•Œ visited๋ฅผ 0์œผ๋กœ ๋ฐ”๊ฟ”์ค˜์•ผ ๋‹ค์Œ L์—์„œ index๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฉ๋ฌธํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. visited๋ฅผ 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์ง€ ์•Š์œผ๋ฉด ์ถœ๋ ฅ์ด [3, 6], [3, 9]์œผ๋กœ๋งŒ ๋‚˜์˜จ๋‹ค. ๋งˆ์ง€๋ง‰์— ์ถœ๋ ฅํ•  ๋•Œ๋Š” answer์— ์–•์€๋ณต์‚ฌslice๋กœ pushํ–ˆ๋‹ค.

 

 

 

let n = 3;
let m = 2;
let arr = [3, 6, 9];

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

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

  function DFS(L){
    if (L === m){
      answer.push(temp.slice());
    }else{
      for (let i=0; i<n; i++){
        if (!visited[i]){
          visited[i] = 1  // ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
          temp[L] = arr[i];
          DFS(L+1);
          visited[i] = 0  // ๋ฐฉ๋ฌธ ํ›„ ๋‹ค์‹œ ์˜ฌ๋ผ๊ฐˆ ๋•Œ ์›์ƒ๋ณต๊ตฌ
        }
      }
    }
  } 

  DFS(0)
  return answer;
}
๋ฐ˜์‘ํ˜•