# ์์
์๋ฐ์คํฌ๋ฆฝํธ ์๊ณ ๋ฆฌ์ฆ ์คํฐ๋์์ ์ฃผ๋ ๊ณผ์ ์ ํ๋ก๊ทธ๋๋จธ์ค "์ฌํ ๊ฒฝ๋ก" ๋ฌธ์ ๊ฐ ์๋ค. ์ด ๋ฌธ์ ๋ฅผ ํ๋ ค๊ณ ํ๋๋ฐ ์ด ๋ฌธ์ ๋ 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)
# ์ก์ค
์์ ์๋์ฝ๋๋ ํ ์๋ฟ์ง ์๋๋ค.. ์๋์ฒ๋ผ ๊ทธ๋ฆผ์ผ๋ก ์ดํดํ๋ ๊ฑด ์๋ฃ๊ตฌ์กฐ, ์๊ณ ๋ฆฌ์ฆ ์๊ฐ์ ์ ํด์ ๊ต์ฅํ ์ดํดํ๊ธฐ ์ฌ์ ๋ค. ํ์ง๋ง ์ฝ๋ํํด์ผํ๋...
# ๊ทธ๋ฆผ ์ค๋ช
DFS ๊ทธ๋ฆผ ์ค๋ช
# DFS ์ฅ์
- ํ ๊ฒฝ๋ก์์ ๋ ธ๋๋ฅผ ๊ธฐ์ตํ๊ธฐ ๋๋ฌธ์ ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
- ์ฐพ์ผ๋ ค๋ ๋ ธ๋๊ฐ ๊น์ ๋จ๊ณ์ ์๋ ๊ฒฝ์ฐ BFS๋ณด๋ค ๋น ๋ฅด๋ค.
# DFS ๋จ์
- ํด๊ฐ ์๋ ๊ฒฝ๋ก๋ฅผ ํ์ํ ๊ฒฝ์ฐ ๋จ๊ณ๊ฐ ๋๋ ๋๊น์ง ํ์ํฉ๋๋ค. ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด์ ๋ฏธ๋ฆฌ ์ง์ ํ ์์ ๊น์ด๊น์ง๋ง ํ์ํ๊ณ ํด๋ฅผ ๋ฐ๊ฒฌํ์ง ๋ชปํ๋ฉด ๋น ์ ธ๋์ ๋ค๋ฅธ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
- DFS๋ฅผ ํตํด์ ์ป์ด์ง ํด๊ฐ ์ต๋จ ๊ฒฝ๋ก๋ผ๋ ๋ณด์ฅ์ด ์๋ค. DFS๋ ํด์ ๋์ฐฉํ๋ฉด ํ์์ ์ข ๋ฃํ๊ธฐ ๋๋ฌธ์ด๋ค.
# DFS vs BFS ์ฐจ์ด
๋ฌธ์ ์ ์ ์ฉํ๊ธฐ ์ํด์ ์ด๋ค ํ์ํ ์ ๋ณด์ธ ๊ฒ ๊ฐ์ BFS๋ฅผ ๋ค์ ์ ๋ฆฌํ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ์์๋ณธ๋ค.
- DFS๋ ์คํ(or ์ฌ๊ท)๋ฅผ ์ฌ์ฉํ๋ค. BFS๋ ํ๋ฅผ ์ฌ์ฉํ๋ค. => ์ฌํ ๊ฒฝ๋ก ๋ฌธ์ ์์๋ ์คํ์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
- BFS๋ ์ฌ๊ท์ ์ผ๋ก ๋์ํ์ง ์๋๋ค.
๋ฌธ์ ๋ฅผ ํธ๋ ์
์ฅ์์๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ๋ถ์ ์ ์์์ผ ํ๋ค.
- ์ต๋จ ๊ฑฐ๋ฆฌ ๋ฌธ์ ๋ฅผ ํผ๋ค๋ฉด BFS ์ฌ์ฉ
- ์ด๋ํ ๋๋ง๋ค ๊ฐ์ค์น๊ฐ ๋ถ์ด์ ์ด๋ํ๋ค๊ฑฐ๋ ์ด๋ ๊ณผ์ ์์ ์ฌ๋ฌ ์ ์ฝ์ด ์์ ๊ฒฝ์ฐ DFS๊ฐ ์ข๋ค.
๐ง ๋ฐฑ์ค ๋ฌธ์
๋ฐฑ์ค ์ถ์ฒ ๋ฌธ์ (dfs, bfs)
# ์ฐธ๊ณ