๋ชฉ์ฐจ
- DFS์ ๊ฐ๋
- DFS์ ์ฅ๋จ์
- DFS์ ์๊ฐ ๋ณต์ก๋
- DFS์ ๊ตฌํ
DFS(๊น์ด ์ฐ์ ํ์)์ด๋?
- DFS(Depth-First Search) ๋๋ ๊น์ด ์ฐ์ ํ์์ด๋ผ๊ณ ๋ถ๋ฆ
- ๊ทธ๋ํ์์ ๊น์ ๋ถ๋ถ์ ๋จผ์ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
- ์คํ ์๋ฃ๊ตฌ์กฐ ๋๋ ์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํจ
DFS์ ๋์ ๊ณผ์
- ํ์ ์์ ๋ ธ๋๋ฅผ ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค.
- ์คํ์ ์ต์๋จ ๋ ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์กด์ฌํ๋ฉด ๊ทธ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค. ๋ง์ฝ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์๋ค๋ฉด ์คํ์ ์ต์๋จ ๋ ธ๋๋ฅผ ๊บผ๋ ๋๋ค.
- ๋ ์ด์ 2๋ฒ์ ๊ณผ์ ์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
DFS์ ์ฅ๋จ์
์ฅ์
- ํ์ฌ ๊ฒฝ๋ก ์์ ๋ ธ๋๋ค๋ง์ ๊ธฐ์ตํ๋ฉด ๋๋ฏ๋ก ์ ์ฅ๊ณต๊ฐ์ ์์๊ฐ ๋น๊ต์ ์ ๋ค.
- ๋ชฉํ ๋ ธ๋๊ฐ ๊น์ ๋จ๊ณ์ ์์ ๊ฒฝ์ฐ ๋ต์ ๋นจ๋ฆฌ ๊ตฌํ ์ ์๋ค.
๋จ์
- ๋ต์ด ์๋ ๊ฒฝ๋ก์ ๊น์ด ๋น ์ง ๊ฐ๋ฅ์ฑ์ด ์๋ค. ์ด ๊ฒฝ์ฐ ๋ฏธ๋ฆฌ ์ง์ ํ ์์์ ๊น์ด๊น์ง๋ง ํ์ํ๊ณ ๋ชฉํ ๋ ธ๋๋ฅผ ๋ฐ๊ฒฌํ์ง ๋ชปํ๋ฉด ๋ค์์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ํ์ํ๋ ๋ฐฉ๋ฒ์ด ์ ์ฉํ ์ ์๋ค.
- ์ป์ด์ง ๋ต์ด ์ต๋จ ๊ฒฝ๋ก๊ฐ ๋๋ค๋ ๋ณด์ฅ์ด ์๋ค. ๋ชฉํ์ ์ด๋ฅด๋ ๊ฒฝ๋ก๊ฐ ๋ค์์ธ ๋ฌธ์ ์์ DFS๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ผ๋ฉด ํ์์ด ์ข ๋ฃ๋๋ฏ๋ก ์ด๋ ์ป์ด์ง ๊ฒฝ๋ก๊ฐ ์ต์ ์ด ์๋ ์ ์๋ค.
DFS์ ์๊ฐ ๋ณต์ก๋
- N: ๋ ธ๋์ ์, E: ๊ฐ์ ์ ์
- ์ธ์ ๋ฆฌ์คํธ๋ก ํํ๋ ๊ทธ๋ํ: O(N+E)
- ์ธ์ ํ๋ ฌ๋ก ํํ๋ ๊ทธ๋ํ: O(N^2)
DFS์ ๊ตฌํ
์คํ์ ์ฌ์ฉํ์ง ์๊ณ ์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํด Python์ผ๋ก ๊ตฌํ
# graph[i]๋ i๋ฒ์งธ ๋
ธ๋์ ์ธ์ ํ ๋
ธ๋ ๋ฒํธ๋ฅผ ํฌํจ
graph = [
[1, 2, 4],
[0, 2],
[0, 1, 3, 4],
[2, 4],
[0, 2, 3]
]
# ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฆฌ์คํธ
visited = [False] * 5
# DFS
def dfs(v):
# ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
visited[v] = True
print(v, end = ' ') # 0 1 2 3 4
# ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋ ๋ฐฉ๋ฌธ
for x in graph[v]:
if not visited[x]:
dfs(x)
# 0๋ฒ ๋
ธ๋๋ถํฐ DFS ์คํ
dfs(0)
์ฐธ๊ณ
- github.com/ndb796/python-for-coding-test
- https://ko.wikipedia.org/wiki/๊น์ด_์ฐ์ _ํ์
- C์ธ์ด๋ก ์ฝ๊ฒ ํ์ด์ด ์๋ฃ๊ตฌ์กฐ
728x90