ํ์์ด๋ ๋ง์ ์์ ๋ฐ์ดํฐ ์ค์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ณผ์
์๋ฃ๊ตฌ์กฐ๋ '๋ฐ์ดํฐ๋ฅผ ํํํ๊ณ ๊ด๋ฆฌํ๊ณ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ตฌ์กฐ'
ํนํ ์คํ๊ณผ ํ๋ ์๋ฃ๊ตฌ์กฐ์ ๊ธฐ์ด ๊ฐ๋ ์ด๋ฉฐ ๋ค์์ ๋ ํต์ฌ์ ์ธ ํจ์๋ก ๊ตฌ์ฑ๋จ
์ด ์ธ์ ์ค๋ฒํ๋ก์ ์ธ๋ํ๋ก๋ ๊ณ ๋ฏผํด์ผ ํจ
์คํ์ ๋ฐ์ค ์๊ธฐ์ ๋น์ ํ ์ ์์
์๋์์๋ถํฐ ์๋ก ์ฐจ๊ณก์ฐจ๊ณก ์๊ณ , ์๋์ ๋ฐ์ค๋ฅผ ์น์ฐ๊ธฐ ์ํด์ ์์ ๋ฐ์ค๋ฅผ ๋จผ์ ๋ด๋ ค์ผ ํจ
์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ์ ์
ํ์ถ ๊ตฌ์กฐ, ํ์
์ ์ถ ๊ตฌ์กฐ๋ผ๊ณ ํจ
ํ์ด์ฌ์์ ์คํ์ ์ด์ฉํ ๋์๋ ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ํ์ ์์
๊ธฐ๋ณธ ๋ฆฌ์คํธ์์ append()์ pop() ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ๋จ
append() ๋ฉ์๋๋ ๋ฆฌ์คํธ์ ๊ฐ์ฅ ๋ค์ชฝ์ ๋ฐ์ดํฐ ์ฝ์
, pop() ๋ฉ์๋๋ ๋ฆฌ์คํธ์ ๊ฐ์ฅ ๋ค์ชฝ์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋
ํ๋ ๋๊ธฐ ์ค์ ๋น์ ํ ์ ์์
๋์ค์ ์จ ์ฌ๋์ผ์๋ก ๋์ค์ ๋ค์ด๊ฐ, '๊ณต์ ํ' ์๋ฃ๊ตฌ์กฐ
์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ์ ์
์ ์ถ ๊ตฌ์กฐ๋ผ๊ณ ํจ
ํ์ด์ฌ์ผ๋ก ํ๋ฅผ ๊ตฌํํ ๋๋ collections ๋ชจ๋์์ ์ ๊ณตํ๋ deque ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์
deque๋ ์คํ๊ณผ ํ์ ์ฅ์ ์ ๋ชจ๋ ์ฑํํ ๊ฒ (๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋นผ๋ ์๋๊ฐ ๋ฆฌ์คํธ ์๋ฃํ์ ๋นํด ํจ์จ์ , queue ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ ๊ฒ๋ณด๋ค ๋ ๊ฐ๋จ)
์ฐธ๊ณ : deque ๊ฐ์ฒด๋ฅผ ๋ฆฌ์คํธ ์๋ฃํ์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์ ํ๋ค๋ฉด list() ๋ฉ์๋๋ฅผ ์ด์ฉํ์
DBS์ BFS๋ฅผ ๊ตฌํํ๋ ค๋ฉด ์ฌ๊ท ํจ์๋ ์ดํดํ๊ณ ์์ด์ผ ํจ
์ฌ๊ท ํจ์๋ ์๊ธฐ ์์ ์ ๋ค์ ํธ์ถํ๋ ํจ์๋ฅผ ์๋ฏธํจ
์ฌ๊ทํจ์๋ฅผ ๋ฌธ์ ํ์ด์์ ์ฌ์ฉํ ๋๋ ์ฌ๊ท ํจ์๊ฐ ์ธ์ ๋๋ ์ง, ์ข
๋ฃ ์กฐ๊ฑด์ ๊ผญ ๋ช
์ํด์ผ ํจ
(ํจ์๊ฐ ๋ฌดํ ํธ์ถ๋ ์ ์๊ธฐ ๋๋ฌธ์)
์ฌ๊ท ํจ์๋ ๋ด๋ถ์ ์ผ๋ก ์คํ ์๋ฃ๊ตฌ์กฐ์ ๋์ผํ๋ค
ย => ์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํด์ผ ํ๋ ์๋น์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํด ๊ฐํธํ๊ฒ ๊ตฌํ๋ ์ ์์ (ex DFS)
์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํ๋ ๋ํ์ ์์ ๋ก๋ ํฉํ ๋ฆฌ์ผ ๋ฌธ์
์ฌ๊ท ํจ์๋ ์ํ์ ์ ํ์(์ฌ๊ท์)์ ๊ทธ๋๋ก ์์ค์ฝ๋๋ก ์ฎ๊ฒผ๊ธฐ์ ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ๋ ๊ฒ๊ณผ ๋น๊ต ํ์ ๋ ๋์ฑ ๊ฐ๊ฒฐํ ํํ์
๊ทธ๋ํ๋ ๋ ธ๋(Node)์ ๊ฐ์ (Edge)์ผ๋ก ํํ๋๋ฉฐ ์ด๋ ๋ ธ๋๋ฅผ ์ ์ (Vertex)์ด๋ผ๊ณ ๋ ํจ
๊ทธ๋ํ ํ์์ด๋ ํ๋์ ๋
ธ๋๋ฅผ ์์์ผ๋ก ๋ค์์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๊ฒ
๋ ๋
ธ๋๊ฐ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ค๋ฉด '๋ ๋
ธ๋๋ ์ธ์ ํ๋ค'๋ผ๊ณ ํํํจ
๊ทธ๋ํ๋ ํฌ๊ฒ 2๊ฐ์ง ๋ฐฉ์์ผ๋ก ํํ ๊ฐ๋ฅ
๐ ์ธ์ ํ๋ ฌ ๋ฐฉ์์ 2์ฐจ์ ๋ฐฐ์ด์ ๊ฐ ๋
ธ๋๊ฐ ์ฐ๊ฒฐ๋ ํํ๋ฅผ ๊ธฐ๋กํ๋ ๋ฐฉ์
ํ์ด์ฌ์์๋ 2์ฐจ์ ๋ฆฌ์คํธ๋ก ๊ตฌํํ ์ ์์
์ฐ๊ฒฐ์ด ๋์ด ์์ง ์์ ๋
ธ๋๋ผ๋ฆฌ๋ ๋ฌดํ์ ๋น์ฉ์ด๋ผ๊ณ ์์ฑํจ
์ธ์ ํ๋ ฌ ๋ฐฉ์ ์์
INF = 999999999 # ๋ฌดํ์ ๋น์ฉ ์ ์ธ
# 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํด ์ธ์ ํ๋ ฌ ํํ
graph = [
[0, 7, 5],
[7, 0, INF],
[5, INF, 0]
]
print(graph)
# ๊ฒฐ๊ณผ
# [[0, 7, 5], [7, 0, 999999999], [5, 999999999, 0]]
๐ ์ธ์ ๋ฆฌ์คํธ ๋ฐฉ์์ ๋ชจ๋ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋
ธ๋์ ๋ํ ์ ๋ณด๋ฅผ ์ฐจ๋ก๋๋ก ์ฐ๊ฒฐํ์ฌ ์ ์ฅํจ
ํ์ด์ฌ์ผ๋ก ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํด ๊ทธ๋ํ๋ฅผ ํํํ๊ณ ์ ํ ๋์๋ ๋จ์ํ 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ๋ฉด ๋จ
์ธ์ ๋ฆฌ์คํธ ๋ฐฉ์ ์์
# ํ(Row)์ด 3๊ฐ์ธ 2์ฐจ์ ๋ฆฌ์คํธ๋ก ์ธ์ ๋ฆฌ์คํธ ํํ
graph = [[] for _ in range(3)]
# ๋
ธ๋ 0์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ(๋
ธ๋, ๊ฑฐ๋ฆฌ)
graph[0].append((1, 7))
graph[0].append((2, 5))
# ๋
ธ๋ 1์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ(๋
ธ๋, ๊ฑฐ๋ฆฌ)
graph[1].append((0, 7))
# ๋
ธ๋ 2์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ(๋
ธ๋, ๊ฑฐ๋ฆฌ)
graph[2].append((0, 5))
print(graph)
# ๊ฒฐ๊ณผ
# [[(1, 7), (2, 5)], [(0, 7)], [(0, 5)]]
๋ ๋ฐฉ์์ ์ฐจ์ด
DFS๋ Depth-First Search, ๊น์ด ์ฐ์ ํ์์ด๋ผ๊ณ ๋ ๋ถ๋ฅด๋ฉฐ ๊ทธ๋ํ์์ ๊น์ ๋ถ๋ถ์ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์
DFS๋ ์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ฉฐ ๊ตฌ์ฒด์ ์ธ ๋์ ๊ณผ์ ์ ์๋์ ๊ฐ์
ย 1. ํ์ ์์ ๋
ธ๋๋ฅผ ์คํ์ ์ฝ์
ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํจ
ย 2. ์คํ์ ์ต์๋จ ๋
ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋๊ฐ ์์ผ๋ฉด ๊ทธ ์ธ์ ๋
ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ
ย ย ย ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํจ, ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋๊ฐ ์์ผ๋ฉด ์คํ์์ ์ต์๋จ ๋
ธ๋๋ฅผ ๊บผ๋
ย 3. 2๋ฒ์ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํจ
BFS๋ Breadth-First Search, ๋๋น ์ฐ์ ํ์์ด๋ผ๊ณ ๋ ๋ถ๋ฅด๋ฉฐ ์ฝ๊ฒ ๋งํด ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์
BFS ๊ตฌํ์์๋ ์ ์
์ ์ถ ๋ฐฉ์์ธ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ์ ์
DFS๋ ์ต๋ํ ๋ฉ๋ฆฌ ์๋ ๋
ธ๋๋ฅผ ์ฐ์ ์ผ๋ก ํ์ํ๋ ๋ฐฉ์์ธ ๋ฐ๋ฉด, BFS๋ ๊ทธ ๋ฐ๋
์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ BFS์ ์ค์ ์ํ ์๊ฐ์ DFS๋ณด๋ค ์ข์ ํธ
BFS๋ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ฉฐ ๊ตฌ์ฒด์ ์ธ ๋์ ๊ณผ์ ์ ์๋์ ๊ฐ์
ย 1. ํ์ ์์ ๋
ธ๋๋ฅผ ํ์ ์ฝ์
ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํจ
ย 2. ํ์์ ๋
ธ๋๋ฅผ ๊บผ๋ด ํด๋น ๋
ธ๋์ ์ธ์ ๋
ธ๋ ์ค์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๋ฅผ
ย ย ย ๋ชจ๋ ํ์ ์ฝ์
ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํจ
ย 3. 2๋ฒ์ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํจ
DFS | BFS | |
---|---|---|
๋์ ์๋ฆฌ | ์คํ | ํ |
๊ตฌํ ๋ฐฉ๋ฒ | ์ฌ๊ท ํจ์ ์ด์ฉ | ํ ์๋ฃ๊ตฌ์กฐ ์ด์ฉ |
N x M ํฌ๊ธฐ์ ์ผ์ ํ์ด ์์
๊ตฌ๋ฉ์ด ๋ซ๋ ค ์๋ ๋ถ๋ถ์ธ 0, ์นธ๋ง์ด๊ฐ ์กด์ฌํ๋ ๋ถ๋ถ์ 1๋ก ํ์๋จ
๊ตฌ๋ฉ์ด ๋ซ๋ ค ์๋ ๋ถ๋ถ๋ผ๋ฆฌ ์, ํ, ์ข, ์ฐ๋ก ๋ถ์ด ์๋ ๊ฒฝ์ฐ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํจ
์ด๋ ์ผ์ ํ์ ๋ชจ์์ด ์ฃผ์ด์ก์ ๋ ์์ฑ๋๋ ์ด ์์ด์คํฌ๋ฆผ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
DFS๋ก ํด๊ฒฐํ ์ ์์
1. ํน์ ํ ์ง์ ์ ์ฃผ๋ณ ์, ํ, ์ข, ์ฐ๋ฅผ ์ดํด๋ณธ ๋ค์ ์ฃผ๋ณ ์ง์ ์ค์์ ๊ฐ์ด '0'์ด๋ฉด์ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ง์ ์ด ์๋ค๋ฉด ํด๋น ์ง์ ์ ๋ฐฉ๋ฌธํจ
2. ๋ฐฉ๋ฌธํ ์ง์ ์์ ๋ค์ ์, ํ, ์ข, ์ฐ๋ฅผ ์ดํด๋ณด๋ฉด์ ๋ฐฉ๋ฌธ์ ๋ค์ ์งํํ๋ฉด, ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ง์ ์ ๋ฐฉ๋ฌธํ ์ ์์
3. 1 ~ 2๋ฒ์ ๊ณผ์ ์ ๋ชจ๋ ๋
ธ๋์ ๋ฐ๋ณตํ๋ฉฐ ๋ฐฉ๋ฌธํ์ง ์์ ์ง์ ์ ์๋ฅผ ์
์ฃผ์ธ๊ณต์ N x M ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ ํํ์ ๋ฏธ๋ก์ ๊ฐํ ์์
๋ฏธ๋ก์๋ ์ฌ๋ฌ ๋ง๋ฆฌ์ ๊ดด๋ฌผ์ด ์์ด ์ด๋ฅผ ํผํด ํ์ถํด์ผ ํจ
์ฃผ์ธ๊ณต์ ์์น๋ (1, 1)์ด๊ณ ๋ฏธ๋ก์ ์ถ๊ตฌ๋ (N, M)์ ์์น์ ์กด์ฌํ๋ฉฐ ํ ๋ฒ์ ํ ์นธ์ฉ ์ด๋ํ ์ ์์
์ด๋ ๊ดด๋ฌผ์ด ์๋ ๋ถ๋ถ์ 0, ๊ดด๋ฌผ์ด ์๋ ๋ถ๋ถ์ 1๋ก ํ์๋์ด ์์
๋ฏธ๋ก๋ ๋ฐ๋์ ํ์ถํ ์ ์๋ ํํ๋ก ์ ์๋จ
์ด๋ ์ฃผ์ธ๊ณต์ด ํ์ถํ๊ธฐ ์ํด ์์ง์ฌ์ผ ํ๋ ์ต์ ์นธ์ ๊ฐ์๋ฅผ ๊ตฌํ์์ค
(์นธ์ ์
๋๋ ์์ ์นธ๊ณผ ๋ง์ง๋ง ์นธ์ ๋ชจ๋ ํฌํจํด์ ๊ณ์ฐํจ)
BFS๋ฅผ ์ด์ฉํ์ ๋ ๋งค์ฐ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ ์ ์์
BFS๋ ์์ ์ง์ ์์ ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ์ฐจ๋ก๋๋ก ๊ทธ๋ํ์ ๋ชจ๋ ๋
ธ๋๋ฅผ ํ์ํ๊ธฐ ๋๋ฌธ
(1, 1) ์ง์ ์์๋ถํฐ BFS๋ฅผ ์ํํ์ฌ ๋ชจ๋ ๋
ธ๋์ ๊ฐ์ ๊ฑฐ๋ฆฌ ์ ๋ณด๋ก ๋ฃ์ผ๋ฉด ๋จ
ํน์ ํ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด ๊ทธ ์ด์ ๋
ธ๋์ ๊ฑฐ๋ฆฌ์ 1์ ๋ํ ๊ฐ์ ๋ฆฌ์คํธ์ ๋ฃ์
๐ ์ด๊ฒ์ด ์ฝ๋ฉ ํ ์คํธ๋ค ๊ต์ฌ๋ฅผ ํตํด ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค.