๊ด€๋ฆฌ ๋ฉ”๋‰ด

CS Student’s SAP&Tech Journey๐Ÿ’ซ

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰(DFS)์ด๋ž€ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰(DFS)์ด๋ž€

์ธํฌ๋งˆํ‹ฑ 2024. 10. 31. 17:29

1. ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ DFS ( Depth - First Search)

 

 

DFS๋Š” ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋ฉฐ ๊ทธ๋ž˜ํ”„์—์„œ ๊นŠ์€ ๋ถ€๋ถ„์„ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. DFS๋Š” ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ ํ˜น์€ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ๋™์ž‘ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

 

 

2. DFS ๋™์ž‘ ์˜ˆ์‹œ (์˜ˆ์‹œ๋Š” ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ์ธ์ ‘ ๋…ธ๋“œ ๋ถ€ํ„ฐ ๋ฐฉ๋ฌธ)

  • [step 0] ๊ทธ๋ž˜ํ”„ ์ค€๋น„ (๋ฐฉ๋ฌธ ๊ธฐ์ค€ : ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ์ธ์ ‘๋…ธ๋“œ๋ถ€ํ„ฐ) / ์‹œ์ž‘๋…ธ๋“œ : 1
  • [step 1] ์‹œ์ž‘๋…ธ๋“œ์ธ ‘1’์„ ์Šคํƒ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
  • [step 2] ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์ธ ‘1’์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘๋…ธ๋“œ ‘2’, ‘3’, ‘8’,์ด ์žˆ์Œ
    ์ด ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋…ธ๋“œ์ธ ‘2’๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ

 

  • [step 3] ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์ธ ‘2’์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘๋…ธ๋“œ ‘7’์ด ์žˆ์Œ
    ๋”ฐ๋ผ์„œ, ‘7’๋ฒˆ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ

 

  • [step 4] ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์ธ ‘7’์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘๋…ธ๋“œ ‘6’, ‘8’์ด ์žˆ์Œ
    ์ด ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋…ธ๋“œ ‘6’๋ฒˆ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ

 

  • [step 5] ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์ธ ‘6’์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘๋…ธ๋“œ๊ฐ€ ์—†์Œ
    ๋”ฐ๋ผ์„œ ์Šคํƒ์—์„œ 6๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊บผ๋ƒ„

 

  • [step 6] ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์ธ ‘7’์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘๋…ธ๋“œ ‘8’์ด ์žˆ์Œ
    ๋”ฐ๋ผ์„œ ‘8’๋ฒˆ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ


  • ์ด๋Ÿฐ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ–ˆ์„ ๋•Œ, ์ „์ฒด ๋…ธ๋“œ์˜ ํƒ์ƒ‰์ˆœ์„œ (์Šคํƒ์— ๋“ค์–ด๊ฐ„ ์ˆœ์„œ)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    โœ”๏ธ ํƒ์ƒ‰ ์ˆœ์„œ :  1 → 2 → 7→ 6 → 8 →3→ 4→ 5

 

 

3. DFS ์ฝ”๋“œ ์˜ˆ์‹œ (์˜ˆ์‹œ๋Š” ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ์ธ์ ‘ ๋…ธ๋“œ ๋ถ€ํ„ฐ ๋ฐฉ๋ฌธ)

* ์–‘๋ฐฉํ–ฅ ํƒ์ƒ‰ ๊ฐ„์„ 
* ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์˜ ์ˆœ์„œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ

# ๊ฐ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ •๋ณด๋ฅผ ํ‘œํ˜„(2์ฐจ์› ๋ฆฌ์ŠคํŠธ)
graph = [
    [], # 0๋ฒˆ ๋…ธ๋“œ ๋น„์›Œ๋‘”๋‹ค.
    [2,3,8], # 1๋ฒˆ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋ฒˆํ˜ธ
    [1,7], # 2๋ฒˆ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋ฒˆํ˜ธ
    [1,4,5],
    [3,5],
    [3,4],
    [7],
    [2,6,8],
    [1,7], # 8๋ฒˆ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋ฒˆํ˜ธ
]

# ๊ฐ ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธ๋œ ์ •๋ณด๋ฅผ ํ‘œํ˜„(1์ฐจ์› ๋ฆฌ์ŠคํŠธ)
v = [False]*9

# ์ •์˜๋œ DFS ํ•จ์ˆ˜ ํ˜ธ์ถœ
def dfs(graph, start, v): # v๋Š” ์‹œ์ž‘๋…ธ๋“œ
    v[start]= True # ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋Š” True๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.
    print(start, end=' ')
    
    for i in graph[start]: # graph ๋ฐฉ๋ฌธ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ํ™•์ธํ•˜๊ธฐ
        if v[i] == False: # ๋งŒ์•ฝ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๊ฐ€ ์•„์ง ๋ฐฉ๋ฌธ์ด ์•ˆ๋˜์—ˆ๋‹ค๋ฉด
            dfs(graph,i,visited) # ๋‹ค์‹œ dfs ํ•จ์ˆ˜ ์‹คํ–‰ํ•˜์—ฌ True๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ž‘์—…ํ•˜์ž

dfs(graph,1,visited)


>> 1 2 7 6 8 3 4 5