DFS๋ž€? What is DFS?

# ์‹œ์ž‘

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋””์—์„œ ์ฃผ๋Š” ๊ณผ์ œ์— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค "์—ฌํ–‰ ๊ฒฝ๋กœ" ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ’€๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์ด ๋ฌธ์ œ๋Š” dfs๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•Œ์•„์•ผ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ  ์ง€๊ธˆ๊นŒ์ง€ dfs๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ์ œ๋Œ€๋กœ ํ’€์–ด๋ณธ ์ ์ด ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ dfs ์ด๋ก ๋ถ€ํ„ฐ ๋‹ค์‹œ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ํ’€์–ด๋ณด๋ ค๊ณ  ์ •๋ฆฌํ•˜์˜€๋‹ค.

# DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)๋ž€?

DFS๋Š” ๋ฏธ๋กœ ํƒ์ƒ‰๊ณผ ๊ฐ™๋‹ค. ๋ฏธ๋กœ์—์„œ ๋์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊นŠ์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ DFS ๋˜ํ•œ ๋” ๊นŠ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ํƒ์ƒ‰ํ•œ๋‹ค.

# ๊ตฌํ˜„

Step 1 : ์Šคํƒ์— ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ๋„ฃ๋Š”๋‹ค.
Step 2 : ์Šคํƒ์ด ๋น„์–ด ์žˆ์œผ๋ฉด ์‹คํ–‰์„ ๋ฉˆ์ถ”๊ณ  False๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Step 3 : ์Šคํƒ์˜ ๋งจ ์œ„ ๋…ธ๋“œ๊ฐ€ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋…ธ๋“œ๋ผ๋ฉด ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•˜๊ณ  True๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Step 4 : Step 3 ์—์„œ ์Šคํƒ์˜ ๋งจ ์œ„ ๋…ธ๋“œ๊ฐ€ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ POPํ•œ๋‹ค.
(์Šคํƒ์— ๋“ค์–ด์˜จ ์ ์ด ์—†๋Š”) POPํ•œ ๋…ธ๋“œ์˜ ๋ชจ๋“  ์ด์›ƒ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„์„œ ์ˆœ์„œ๋Œ€๋กœ ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค.
Step 5 : Step 3์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

# Pseudo Code

DFS(G, u)
    u.visited = truefor each v โˆˆ G.Adj[u]
        if v.visited == false
            DFS(G,v)

init()
    For each u โˆˆ G
        u.visited = falseFor each u โˆˆ G
       DFS(G, u)
# ์žก์„ค
์œ„์˜ ์ˆ˜๋„์ฝ”๋“œ๋Š” ํ™• ์™€๋‹ฟ์ง€ ์•Š๋Š”๋‹ค.. ์•„๋ž˜์ฒ˜๋Ÿผ ๊ทธ๋ฆผ์œผ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฑด ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹œ๊ฐ„์— ์ ‘ํ•ด์„œ ๊ต‰์žฅํžˆ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์› ๋‹ค. ํ•˜์ง€๋งŒ ์ฝ”๋“œํ™”ํ•ด์•ผํ•˜๋‹ˆ...

# ๊ทธ๋ฆผ ์„ค๋ช…

notion image
DFS ๊ทธ๋ฆผ ์„ค๋ช…

# DFS ์žฅ์ 
  • ํ˜„ ๊ฒฝ๋กœ์ƒ์˜ ๋…ธ๋“œ๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ
  • ์ฐพ์œผ๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ ๊นŠ์€ ๋‹จ๊ณ„์— ์žˆ๋Š” ๊ฒฝ์šฐ BFS๋ณด๋‹ค ๋น ๋ฅด๋‹ค.
# DFS ๋‹จ์ 
  • ํ•ด๊ฐ€ ์—†๋Š” ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•  ๊ฒฝ์šฐ ๋‹จ๊ณ„๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ ๋ฏธ๋ฆฌ ์ง€์ •ํ•œ ์ž„์˜ ๊นŠ์ด๊นŒ์ง€๋งŒ ํƒ์ƒ‰ํ•˜๊ณ  ํ•ด๋ฅผ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋น ์ ธ๋‚˜์™€ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • DFS๋ฅผ ํ†ตํ•ด์„œ ์–ป์–ด์ง„ ํ•ด๊ฐ€ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ผ๋Š” ๋ณด์žฅ์ด ์—†๋‹ค. DFS๋Š” ํ•ด์— ๋„์ฐฉํ•˜๋ฉด ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

# DFS vs BFS ์ฐจ์ด
๋ฌธ์ œ์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ค ํ•„์š”ํ•œ ์ •๋ณด์ธ ๊ฒƒ ๊ฐ™์•„ BFS๋ฅผ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ์•Œ์•„๋ณธ๋‹ค.
  • DFS๋Š” ์Šคํƒ(or ์žฌ๊ท€)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. BFS๋Š” ํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. => ์—ฌํ–‰ ๊ฒฝ๋กœ ๋ฌธ์ œ์—์„œ๋Š” ์Šคํƒ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.
  • BFS๋Š” ์žฌ๊ท€์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.
๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ์ž…์žฅ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ๋ถ„์ ์„ ์•Œ์•„์•ผ ํ•œ๋‹ค.
  • ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค๋ฉด BFS ์‚ฌ์šฉ
  • ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€์ค‘์น˜๊ฐ€ ๋ถ™์–ด์„œ ์ด๋™ํ•œ๋‹ค๊ฑฐ๋‚˜ ์ด๋™ ๊ณผ์ •์—์„œ ์—ฌ๋Ÿฌ ์ œ์•ฝ์ด ์žˆ์„ ๊ฒฝ์šฐ DFS๊ฐ€ ์ข‹๋‹ค.

๐Ÿง ๋ฐฑ์ค€ ๋ฌธ์ œ

notion image
๋ฐฑ์ค€ ์ถ”์ฒœ ๋ฌธ์ œ(dfs, bfs)

# ์ฐธ๊ณ