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

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

by YWTechIT 2021. 10. 6.
728x90

๐Ÿ“ section09 - 3 - ๊ฒฝ๋กœ ํƒ์ƒ‰(์ธ์ ‘๋ฆฌ์ŠคํŠธ)

๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์ง€๋ฉด 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

 

์ด์ „๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ์ง€๋งŒ ์ด๋ฒˆ์—๋Š” ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•ด์„œ ํ‘ธ๋Š” ๋ฌธ์ œ๋‹ค. ๋งŒ์•ฝ์— ๊ทธ๋ž˜ํ”„๋ฅผ ์ด์šฉํ•œ ๋ฌธ์ œ์—์„œ ์ •์ ์˜ ๊ฐœ์ˆ˜๊ฐ€ 10,000๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ์ธ์ ‘๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ž.(์ธ์ ‘ ํ–‰๋ ฌ์€ ์ •์ ์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ด๋‹ค.) ์ด ๋ฌธ์ œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ DFS๋ฅผ ์ด์šฉํ•ด์„œ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฝ๋กœ์˜ ๊ฐ€์ง“์ˆ˜๋งŒ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ด๋™ํ–ˆ๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด path ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

 

  1. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ˜๋ณต๋ฌธ์˜ ๋ฒ”์œ„๋Š” graph[v].length๊นŒ์ง€
  2. ์ธ์ ‘ ํ–‰๋ ฌ์ฒ˜๋Ÿผ ์ •์ ๋ผ๋ฆฌ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ž‘์—…(graph[v][i]===1)์ด ํ•„์š” ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋Š” ์ •์ ๋ผ๋ฆฌ ์ด๋ฏธ ์—ฐ๊ฒฐ๋œ ๊ฐ’๋งŒ ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋Œ€์‹  visited ๋ฐฐ์—ด๋กœ ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋งŒ ์กฐ๊ฑด์— ๊ฑธ์–ด์ฃผ๋ฉด ๋œ๋‹ค.
  3. ๋‹ค์Œ DFSํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋Š” DFS(graph[v][i])๋ฅผ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.

 

 

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 graph = Array.from(Array(n+1), () => Array());
  let visited = Array.from({length: n+1}, () => 0);
  let cnt=0;
  let path=[];

  for (let [a, b] of arr) graph[a].push(b);  // ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ

  function dfs(v){
    if (v === n){
      console.log(path);
      cnt++;
    }else{
      for (let i=0; i<graph[v].length; i++){
        if (!visited[graph[v][i]]){
          visited[graph[v][i]]=1;
          path.push(graph[v][i])
          dfs(graph[v][i]);
          visited[graph[v][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
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€