์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜, DFS(Depth-First Search)

alswlfl 2026. 4. 4. 23:33

 DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)

  • ํŠน์ • ๋ฐฉํ–ฅ์œผ๋กœ ์ตœ๋Œ€ํ•œ ๊นŠ์ด ๋“ค์–ด๊ฐ€์„œ ๋น ์ ธ๋‚˜์˜ค๋Š” ๋ฐฉ์‹
  • DFS๋Š” ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ ์‚ฌ์šฉ
์Šคํƒ(Stack): ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์ค‘์— ๋‚˜๊ฐ€๋Š” ํ˜•์‹ → FILO
  • DFS๋Š” 2์ฐจ์› ๋ฐฐ์—ด(๋ฆฌ์ŠคํŠธ)๋กœ ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„
  • ๊ทธ๋ž˜ํ”„ ํ˜น์€ ํŠธ๋ฆฌ์—์„œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ, ์™„์ „ํƒ์ƒ‰ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ํ‘œํ˜„ ๋ฐฉ์‹

0  
1 2, 3
2 1, 5
3 1, 4, 5
4 3, 5
5 2, 3, 4

 

 

๊ธฐ๋ณธ ๋™์ž‘ ๋ฐฉ์‹

  1. ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  [๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ]
  2. ์Šคํƒ์— ๋งˆ์ง€๋ง‰์œผ๋กœ ๋“ค์–ด์˜จ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
    • ์žˆ๋‹ค๋ฉด, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์‚ฝ์ž…ํ•˜๊ณ  [๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ]
    • ์—†๋‹ค๋ฉด, ํ˜„์žฌ ๋…ธ๋“œ(์Šคํƒ์— ๋งˆ์ง€๋ง‰์œผ๋กœ ๋“ค์–ด์˜จ ๋…ธ๋“œ)๋ฅผ ์Šคํƒ์—์„œ ์ถ”์ถœ
  3. 2๋ฒˆ ๊ณผ์ •์„ ๋” ์ด์ƒ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

์ฆ‰, ๊ฐ ๋…ธ๋“œ ๋ฐ ๊ฐ„์„ ์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ์”ฉ๋งŒ ํ™•์ธ

A B, C, D
B A
C A, E, F
D G
E C, H
F C
G D
H E

 

 

๋…ธ๋“œ ๋ฐฉ๋ฌธ ์ˆœ์„œ: A → B → C → E → H → F → D → G 

 

๊ตฌํ˜„ ํŠน์ง•

  • ์Šคํƒ ํ˜น์€ ์žฌ๊ท€ํ•จ์ˆ˜ ์ด์šฉ
  • ์™„์ „ ํƒ์ƒ‰์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ, ํƒ์ƒ‰ ์†๋„๊ฐ€ BFS๋ณด๋‹ค ๋А๋ฆผ
  • ๊ตฌํ˜„์˜ ํŽธ๋ฆฌ์„ฑ ๋•Œ๋ฌธ์— BFS ๋Œ€์‹  DFS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ

์‚ฌ์šฉ ์˜ˆ์‹œ

  • ๋” ์งง์€ ์ฝ”๋“œ๋กœ ๊ฐ„๊ฒฐํžˆ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
  •  ํ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
  • ํŠธ๋ฆฌ์˜ ์ˆœํšŒ, ์ ํ™”์‹ ๊ตฌํ˜„ ๋“ฑ DFS์— ํŠนํ™”๋œ ๋ฌธ์ œ์ธ ๊ฒฝ์šฐ
  • ํŠธ๋ฆฌ์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํƒ์ƒ‰์„ ๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ(ํŠธ๋ฆฌ์—์„œ๋Š” ๋‘ ๋…ธ๋“œ๋ฅผ ์ž‡๋Š” ๊ฒฝ๋กœ๊ฐ€ ํ•˜๋‚˜๋งŒ ์กด์žฌ)

DFS ์†Œ์Šค ์ฝ”๋“œ ์˜ˆ์‹œ

๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ๋ ์œ„์น˜๊นŒ์ง€ ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด, ๋‹ค์‹œ ์ตœ๊ทผ์˜ ๊ฐˆ๋ฆผ๊ธธ๋กœ ๋Œ์•„๊ฐ€์„œ ๋‹ค๋ฅธ์œ„์น˜๋กœ๋„ ๊ฐ€๋ณด๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌ

function dfs(graph, v, visited) {
    visited[v] = true; // ํ˜„์žฌ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
    console.log(v);
    // ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ด€๋œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๋ฐฉ๋ฌธ
    for (const i of graph[v]) {
        if (!visited[i]) {
            dfs(graph, i, visited);
        }
    }
}

// ๊ฐ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ •๋ณด๋ฅผ ํ‘œํ˜„
const graph = [
    [], // ํŽธ์˜์„ฑ์„ ์œ„ํ•ด 0๋ฒˆ ๋…ธ๋“œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
    [2, 3, 4],
    [1],
    [1, 5, 6],
    [1, 7],
    [3, 8],
    [3],
    [4],
    [5],
];

// ๊ฐ ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธ๋œ ์ •๋ณด๋ฅผ ํ‘œํ˜„
const visited = Array(9).fill(false);

// ์ •์˜๋œ DFS ํ•จ์ˆ˜ ํ˜ธ์ถœ
dfs(graph, 1, visited);