๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section09 - 2 - ๊ฒฝ๋กœ ํƒ์ƒ‰(์ธ์ ‘ํ–‰๋ ฌ)

by YWTechIT 2021. 10. 6.
728x90

๐Ÿ“ section09 - 2 - ๊ฒฝ๋กœ ํƒ์ƒ‰(์ธ์ ‘ํ–‰๋ ฌ)

๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์ง€๋ฉด 1๋ฒˆ ์ •์ ์—์„œ N๋ฒˆ ์ •์ ์œผ๋กœ ๊ฐ€๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ์˜ ๊ฐ€์ง€ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1๋ฒˆ ์ •์ ์—์„œ 5๋ฒˆ ์ •์ ์œผ๋กœ ๊ฐ€๋Š” ๊ฐ€์ง€ ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

1 2 3 4 5
1 2 5
1 3 4 2 5
1 3 4 5
1 4 2 5
1 4 5

 

์ด ๋ฌธ์ œ๋Š” DFS๋ฅผ ์ด์šฉํ•ด์„œ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฝ๋กœ์˜ ๊ฐ€์ง“์ˆ˜๋งŒ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ด๋™ํ–ˆ๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด path ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

 

  1. 2์ฐจ์› ๋ฐฐ์—ด์˜ graph๋ฅผ ์„ ์–ธํ•˜์—ฌ ์ •์ ๊ณผ ๊ฐ„์„ ์˜ ์ •๋ณด๋ฅผ ๋„ฃ๋Š”๋‹ค.
  2. visited ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜์—ฌ ์ด๋ฏธ ์ง€๋‚˜์˜จ ๊ณณ์€ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์ง„ํ–‰ํ•œ๋‹ค.
  3. DFS์˜ ์ข…๋ฃŒ ์กฐ๊ฑด์€ v๊ฐ€ n๊ณผ ๊ฐ™์„ ๋•Œ์ด๋‹ค.
  4. ์ธ์ ‘ ํ–‰๋ ฌ์ด๋ฏ€๋กœ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ชจ๋“  ์ •์ ์„ ํƒ์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค.
  5. DFS ํ•จ์ˆ˜๋ฅผ ๋Œ๋ฆฌ๊ธฐ ์ „ 1๋ฒˆ ์ •์ ์—์„œ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ visited[1]=1์„ ์„ ์–ธํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 1๋ฒˆ ์ •์ ์— ์ค‘๋ณต ๋ฐฉ๋ฌธํ•œ๋‹ค.

 

 

728x90

 

let n = 5;
let m = 9;
let arr = [
    [1, 2],
    [1, 3],
    [1, 4],
    [2, 1],
    [2, 3],
    [2, 5],
    [3, 4],
    [4, 2],
    [4, 5],
];

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

function solution(n, m, arr){
  let visited = Array.from({length: n+1});
  let graph = Array.from(Array(n+1), () => Array(n+1).fill(0));
  let path = []
  let cnt=0;

  for (let [a, b] of arr) graph[a][b] = 1;  // graph์— ๊ฐ’ ๋„ฃ๊ธฐ

  function DFS(v){
    if (v === n){
      console.log(path);  // ๊ฒฝ๋กœ ์ถœ๋ ฅ
      cnt++;  // ๊ฒฝ๋กœ์˜ ๊ฐ€์ง“ ์ˆ˜ ์ถœ๋ ฅ
    }else{
      for (let i=1; i<=n; i++){
        if (!visited[i] && graph[v][i]){
          visited[i] = 1;
          path.push(i)
          DFS(i);
          visited[i] = 0;
          path.pop()
        }
      }
    }
  }

  path.push(1);
  visited[1]=1;
  DFS(1);
  return cnt;
}

๐Ÿ‘‰๐Ÿฝ
[ 1, 2, 3, 4, 5 ]
[ 1, 2, 5 ]
[ 1, 3, 4, 2, 5 ]
[ 1, 3, 4, 5 ]
[ 1, 4, 2, 5 ]
[ 1, 4, 5 ]
6
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€