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

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section08 - 4 - ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ(DFS)

YWTechIT 2021. 9. 17. 11:48
728x90

๐Ÿ“ section08 - 4 - ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ(DFS)

์ž์—ฐ์ˆ˜ n์ด ์ฃผ์–ด์ง€๋ฉด 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์›์†Œ๋ฅผ ๊ฐ–๋Š” ์ง‘ํ•ฉ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๋ชจ๋‘ ๊ตฌํ•˜์—ฌ ์ถœ๋ ฅ ์˜ˆ์ œ์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•˜๋Š”๋ฐ ๊ณต์ง‘ํ•ฉ์€ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋‹ค. N์˜ ๋ฒ”์œ„๋Š” 1<=N<=10์ธ๋ฐ ๋งŒ์•ฝ, N์ด 10๊ฐœ๋ผ๋ฉด ๋‚ด๊ฐ€ ๊ตฌํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๊ฐœ์ˆ˜๋Š” 2^10-1 = 1,024-1(๊ณต์ง‘ํ•ฉ)= 1,023๊ฐœ์ด๋‹ค. ์žฌ๊ท€์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ์ฐพ์•„๊ฐˆ ๋•Œ ๋‹ค์Œ์ฒ˜๋Ÿผ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋ฉด ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค.

 

// ์ž…๋ ฅ
3

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

 

 

  1. ๊ธธ์ด N๋งŒํผ ๋นˆ ๋ฐฐ์—ด์„ 0์œผ๋กœ ์„ ์–ธํ•œ๋‹ค. (๋งˆ์ง€๋ง‰์— index๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๊ทธ๊ฒƒ์ด ๋ถ€๋ถ„์ง‘ํ•ฉ์ด ๋œ๋‹ค.)
  2. ํ˜„์žฌ L๋ ˆ๋ฒจ ์ผ ๋•Œ, visit[v] = 1๋กœ ์„ ์–ธํ•˜์—ฌ ์žฌ๊ท€์ ์œผ๋กœ ์ˆœํšŒํ•˜๊ณ  visit[v] = 0๋กœ ์„ ์–ธํ•˜์—ฌ ์žฌ๊ท€์ ์œผ๋กœ ์ˆœํšŒํ•œ๋‹ค.
  3. ํ•œ ๊ฐ€์ง€(branch)๊ฐ€ ๋๋‚˜๋ฉด ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

728x90

 

let n = 3;

console.log(solution(3));

function solution(n) {
    let visit = Array.from({ length: n + 1 }, () => 0); // n๋ฒˆ๊นŒ์ง€ idx๊ฐ€ ์ƒ๊ฒจ์•ผํ•˜๋ฏ€๋กœ
    let answer = [];

    function DFS(v) {
        if (v === n + 1) {  // DFS๊ฐ€ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ v๊ฐ€ n+1์ผ๋•Œ๊นŒ์ง€ ์ˆœํšŒํ•ด์•ผ ์ •์ƒ์ ์œผ๋กœ index๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
            let temp = "";
            for (let i = 0; i < visit.length; i++) {
                if (visit[i]) temp += (i + " ");
            }
            answer.push(temp.trim());
        } else {
            visit[v] = 1;
            DFS(v + 1);
            visit[v] = 0;
            DFS(v + 1);
        }
    }
    DFS(1);
    return answer.join("\n");
}
๐Ÿ‘‰๐Ÿฝ 
1 2 3
1 2 
1 3
1 
2 3
2
3
๋ฐ˜์‘ํ˜•