๊ทธ๋ํ๋ ํธ๋ฆฌ ๊ตฌ์กฐ์ ๋ํด์ ์ถฉ๋ถํ ์ค๋ช ์ด ์๋ ๊ธ์ ์๋๋๋ค.
python ์ผ๋ก DFS , BFS ๋ฅผ ๊ตฌํํ๋ ๊ฐ๋จํ ์ฝ๋์ ๊ทธ์ ๋ํ ๊ฐ๋ ์ ์ ๋ฆฌํ๊ณ ์์ต๋๋ค.
๊ทธ๋ํ๋?
- ์ฌ์ฉ
์ง๋, ๋ค์ด๊ฒ์ด์ ์ ์ฐ์
SNS, ๋ฉ์ ์ (ํ๋ก์ฐ/์ธํ๋ก์ฐ)
๊น VCS ์ ์ฐ์
- ์ ์ (vertext == node) ๊ณผ ๊ฐ์ (edge)๋ก ์ด๋ฃจ์ด์ ธ ์์.
- ๊ตฌ๋ถ
1. ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ(==์๋ฐฉํฅ ๊ทธ๋ํ)
2. ๋ฐฉํฅ ๊ทธ๋ํ
--------------------------------
1. ์ํ ๊ทธ๋ํ
2. ๋น์ํ ๊ทธ๋ํ
๋ฐฉํฅ์ฑ ๋น์ํ ๊ทธ๋ํ(DAG) Directed Acyclic Graph
- ์ฐ๊ฒฐ์์
ํธ๋ฆฌ๋?
- ์ํ์ฑX, ๋ฌด๋ฐฉํฅ
- ๋ฃจํธ ๋ ธ๋, ๋ฆฌํ ๋ ธ๋
- ๋ ธ๋ A์์ ๋ ธ๋ B๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ ๋ฐ๋์ ์กด์ฌํ๋ฉฐ ์ ์ผํ๋ค.
๊ทธ๋ํ๋ฅผ ์ด๋ป๊ฒ ์ฝ๋๋ก?
1) ์ธ์ ํ๋ ฌ๋ก
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 0 |
2 | 0 | 0 | 0 | 0 |
3 | 0 | 0 | 1 | 0 |
2) ์ธ์ ๋ฆฌ์คํธ๋ก
0 | →1→2→3
1 | →2
2 |
3 | →2
๋ฉ๋ชจ๋ฆฌ: ์ธ์ ํ๋ ฌ๋ณด๋ค ์ธ์ ๋ฆฌ์คํธ๊ฐ ๋ ์ฐ์
์๊ฐ: ์ธ์ ํ๋ ฌ์ด ์ธ์ ๋ฆฌ์คํธ๋ณด๋ค ๋ ์ฐ์
๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ
1) DFS : ๊น์ด ์ฐ์ ํ์
์คํ ๋๋ ์ฌ๊ท(์ฌ๊ท๋ ์คํ์) ์ฌ์ฉํด์ ๊ตฌํ
BackTracking (ํด๋ฅผ ์ฐพ๊ธฐ ์ํด์ ์ฒดํฌ ํ๋ค๊ฐ, ์ ์ฝ ์กฐ๊ฑด์ ๋ง์กฑํ ์ ์๋ค๊ณ ํ๋จ๋๋ฉด ์ฆ์ ๋ค๋ก ๋์๊ฐ๋(์ด ํ๋ณด๊ตฐ์ ์ฒดํฌ ํ์ง ์์ ๊ฒ์ ํ๊ธฐ ํ/ ๊ฐ ํ๋ณด๊ตฐ๋ค์ DFS๋ก ํ์ธํ๋ค.)
- ์ผ๋ฐ์ ์ธ DFS ์๊ฐ ๋ณต์ก๋
- ๋ ธ๋ ์: V
- ๊ฐ์ ์: E
- ์ ์ฝ๋์์ while need_visit ์ V + E ๋ฒ ๋งํผ ์ํํจ
- ์๊ฐ ๋ณต์ก๋: O(V + E)
def dfs(graph, start_node):
visited, need_visit = list(), list()
need_visit.append(start_node)
while need_visit:
node = need_visit.pop()
if node not in visited:
visited.append(node)
need_visit.extend(graph[node])
return visited
2) BFS: ๋๋น ์ฐ์ ํ์
ํ ์ฌ์ฉํ์ฌ ๊ตฌํ
- ์ผ๋ฐ์ ์ธ BFS ์๊ฐ ๋ณต์ก๋
- ๋ ธ๋ ์: V
- ๊ฐ์ ์: E
- ์ ์ฝ๋์์ while need_visit ์ V + E ๋ฒ ๋งํผ ์ํํจ
- ์๊ฐ ๋ณต์ก๋: O(V + E)
def bfs(graph, start_node):
visited = list()
need_visit = list()
need_visit.append(start_node)
while need_visit:
node = need_visit.pop(0)
if node not in visited:
visited.append(node)
need_visit.extend(graph[node])
return visited
'CodingTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Mac VScode C ์ธ์ด ํ๊ฒฝ ์ค์ + VScode ์์ ์ญ์ ๋ฐฉ๋ฒ (0) | 2022.01.13 |
---|---|
[Python] DP, ๋์ ๊ณํ๋ฒ (0) | 2021.05.19 |
[Python]๋ฐฑ์ค 1764 ::๋ฃ๋ณด์ก ๋ฌธ์ ํ์ด (0) | 2021.05.12 |
[Python]๋ฐฑ์ค 1874 ::์คํ์์ด ๋ฌธ์ ํ์ด (0) | 2021.05.12 |
[Python]๋ฐฑ์ค 1935 ::ํ์ํ๊ธฐ์ (0) | 2021.05.12 |
๋๊ธ