ํธ๋ฆฌ ์ํ ์๊ณ ๋ฆฌ์ฆ์ธ ๊น์ด ์ฐ์ ํ์(DFS)๊ณผ ๋๋น ์ฐ์ ํ์(BFS)์ ๋ํ ์ข ํฉ ๊ฐ์ด๋. ์๋ฆฌ, ๊ตฌํ, ์ฌ์ฉ ์ฌ๋ก ๋ฐ ์ฑ๋ฅ ํน์ฑ์ ์์๋ณด์ธ์.
ํธ๋ฆฌ ์ํ ์๊ณ ๋ฆฌ์ฆ: ๊น์ด ์ฐ์ ํ์(DFS) vs. ๋๋น ์ฐ์ ํ์(BFS)
์ปดํจํฐ ๊ณผํ์์ ํธ๋ฆฌ ์ํ(ํธ๋ฆฌ ํ์ ๋๋ ํธ๋ฆฌ ์ํน์ด๋ผ๊ณ ๋ ํจ)๋ ํธ๋ฆฌ ์๋ฃ ๊ตฌ์กฐ์ ๊ฐ ๋ ธ๋๋ฅผ ์ ํํ ํ ๋ฒ ๋ฐฉ๋ฌธ(๊ฒ์ฌ ๋ฐ/๋๋ ์ ๋ฐ์ดํธ)ํ๋ ๊ณผ์ ์ ๋๋ค. ํธ๋ฆฌ๋ ํ์ผ ์์คํ ์ด๋ ์กฐ์ง ๊ตฌ์กฐ์ ๊ฐ์ ๊ณ์ธต์ ๋ฐ์ดํฐ๋ฅผ ํํํ๊ฑฐ๋ ํจ์จ์ ์ธ ๊ฒ์ ๋ฐ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ฉ์ดํ๊ฒ ํ๋ ๋ฑ ๋ค์ํ ์์ฉ ๋ถ์ผ์์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ ๊ตฌ์กฐ์ ๋๋ค. ํธ๋ฆฌ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํด์๋ ํธ๋ฆฌ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
ํธ๋ฆฌ ์ํ์๋ ๊น์ด ์ฐ์ ํ์(DFS)๊ณผ ๋๋น ์ฐ์ ํ์(BFS)์ด๋ผ๋ ๋ ๊ฐ์ง ์ฃผ์ ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค. ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ณ ์ ํ ์ฅ์ ์ ์ ๊ณตํ๋ฉฐ ๋ค์ํ ์ ํ์ ๋ฌธ์ ์ ์ ํฉํฉ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ DFS์ BFS์ ์๋ฆฌ, ๊ตฌํ, ์ฌ์ฉ ์ฌ๋ก ๋ฐ ์ฑ๋ฅ ํน์ฑ์ ์์ธํ ๋ค๋ฃฐ ๊ฒ์ ๋๋ค.
ํธ๋ฆฌ ์๋ฃ ๊ตฌ์กฐ ์ดํด
์ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์์๋ณด๊ธฐ ์ ์ ํธ๋ฆฌ ์๋ฃ ๊ตฌ์กฐ์ ๊ธฐ๋ณธ ์ฌํญ์ ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํธ๋ฆฌ๋ ๋ฌด์์ธ๊ฐ?
ํธ๋ฆฌ๋ ์ฃ์ง๋ก ์ฐ๊ฒฐ๋ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ ๊ณ์ธต์ ์๋ฃ ๊ตฌ์กฐ์ ๋๋ค. ๋ฃจํธ ๋ ธ๋(์ต์์ ๋ ธ๋)๋ฅผ ๊ฐ์ง๋ฉฐ, ๊ฐ ๋ ธ๋๋ 0๊ฐ ์ด์์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ์์์ด ์๋ ๋ ธ๋๋ ๋ฆฌํ ๋ ธ๋๋ผ๊ณ ํฉ๋๋ค. ํธ๋ฆฌ์ ์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฃจํธ: ํธ๋ฆฌ์์ ๊ฐ์ฅ ์์ ์๋ ๋ ธ๋.
- ๋ ธ๋: ๋ฐ์ดํฐ์ ์ ์ฌ์ ์ผ๋ก ์์ ๋ ธ๋์ ๋ํ ์ฐธ์กฐ๋ฅผ ํฌํจํ๋ ํธ๋ฆฌ ๋ด์ ์์.
- ์ฃ์ง: ๋ ๋ ธ๋ ์ฌ์ด์ ์ฐ๊ฒฐ.
- ๋ถ๋ชจ: ํ๋ ์ด์์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ๋ ธ๋.
- ์์: ํธ๋ฆฌ์์ ๋ค๋ฅธ ๋ ธ๋(๊ทธ ๋ถ๋ชจ)์ ์ง์ ์ฐ๊ฒฐ๋ ๋ ธ๋.
- ๋ฆฌํ: ์์์ด ์๋ ๋ ธ๋.
- ์๋ธํธ๋ฆฌ: ๋ ธ๋์ ๊ทธ ๋ชจ๋ ์์์ผ๋ก ๊ตฌ์ฑ๋ ํธ๋ฆฌ.
- ๋ ธ๋์ ๊น์ด: ๋ฃจํธ์์ ๋ ธ๋๊น์ง์ ์ฃ์ง ์.
- ํธ๋ฆฌ์ ๋์ด: ํธ๋ฆฌ ๋ด ๋ชจ๋ ๋ ธ๋์ ์ต๋ ๊น์ด.
ํธ๋ฆฌ์ ์ข ๋ฅ
ํน์ ์์ฑ๊ณผ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์ง ์ฌ๋ฌ ํธ๋ฆฌ์ ๋ณํ์ด ์กด์ฌํฉ๋๋ค. ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ด์ง ํธ๋ฆฌ: ๊ฐ ๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์(์ผ๋ฐ์ ์ผ๋ก ์ผ์ชฝ ์์๊ณผ ์ค๋ฅธ์ชฝ ์์์ด๋ผ๊ณ ํจ)์ ๊ฐ์ง๋ ํธ๋ฆฌ.
- ์ด์ง ํ์ ํธ๋ฆฌ (BST): ๊ฐ ๋ ธ๋์ ๊ฐ์ด ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ๋ชจ๋ ๋ ธ๋ ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋ชจ๋ ๋ ธ๋ ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ด์ง ํธ๋ฆฌ. ์ด ์์ฑ์ ํจ์จ์ ์ธ ๊ฒ์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- AVL ํธ๋ฆฌ: ๊ฒ์, ์ฝ์ ๋ฐ ์ญ์ ์์ ์ ๋ํด ๋ก๊ทธ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ๊ท ํ ์กํ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ ์์ฒด ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ.
- ๋ ๋-๋ธ๋ ํธ๋ฆฌ: ๊ท ํ์ ์ ์งํ๊ธฐ ์ํด ์์ ์์ฑ์ ์ฌ์ฉํ๋ ๋ ๋ค๋ฅธ ์์ฒด ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ.
- N-์ง ํธ๋ฆฌ (๋๋ K-์ง ํธ๋ฆฌ): ๊ฐ ๋ ธ๋๊ฐ ์ต๋ N๊ฐ์ ์์์ ๊ฐ์ง ์ ์๋ ํธ๋ฆฌ.
๊น์ด ์ฐ์ ํ์ (DFS)
๊น์ด ์ฐ์ ํ์(DFS)์ ๋ฐฑํธ๋ํนํ๊ธฐ ์ ์ ๊ฐ ๊ฐ์ง๋ฅผ ๋ฐ๋ผ ๊ฐ๋ฅํ ํ ๋ฉ๋ฆฌ ํ์ํ๋ ํธ๋ฆฌ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ํ์ ๋ ธ๋๋ฅผ ํ์ํ๊ธฐ ์ ์ ํธ๋ฆฌ์ ๊น์ ๊ณณ์ผ๋ก ๋ค์ด๊ฐ๋ ๊ฒ์ ์ฐ์ ์ํฉ๋๋ค. DFS๋ ์คํ์ ์ฌ์ฉํ์ฌ ์ฌ๊ท์ ์ผ๋ก ๋๋ ๋ฐ๋ณต์ ์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
DFS ์๊ณ ๋ฆฌ์ฆ
DFS ์ํ์๋ ์ธ ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ ํ์ด ์์ต๋๋ค.
- ์ค์ ์ํ (์ผ์ชฝ-๋ฃจํธ-์ค๋ฅธ์ชฝ): ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ ๋ค์ ๋ฃจํธ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ๋ง์ง๋ง์ผ๋ก ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํฉ๋๋ค. ์ด์ง ํ์ ํธ๋ฆฌ์ ๋ ธ๋๋ฅผ ์ ๋ ฌ๋ ์์๋ก ๋ฐฉ๋ฌธํ๊ธฐ ๋๋ฌธ์ ์ด์ง ํ์ ํธ๋ฆฌ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ์ ์ ์ํ (๋ฃจํธ-์ผ์ชฝ-์ค๋ฅธ์ชฝ): ๋ฃจํธ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ๋ค์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ๋ง์ง๋ง์ผ๋ก ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํฉ๋๋ค. ์ด๋ ํธ๋ฆฌ์ ๋ณต์ฌ๋ณธ์ ์์ฑํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
- ํ์ ์ํ (์ผ์ชฝ-์ค๋ฅธ์ชฝ-๋ฃจํธ): ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ ๋ค์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ๋ง์ง๋ง์ผ๋ก ๋ฃจํธ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํฉ๋๋ค. ์ด๋ ํธ๋ฆฌ๋ฅผ ์ญ์ ํ๋ ๋ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๊ตฌํ ์์ (Python)
๋ค์์ ๊ฐ ์ ํ์ DFS ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ Python ์์ ์ ๋๋ค.
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
# Inorder Traversal (Left-Root-Right)
def inorder_traversal(root):
if root:
inorder_traversal(root.left)
print(root.data, end=" ")
inorder_traversal(root.right)
# Preorder Traversal (Root-Left-Right)
def preorder_traversal(root):
if root:
print(root.data, end=" ")
preorder_traversal(root.left)
preorder_traversal(root.right)
# Postorder Traversal (Left-Right-Root)
def postorder_traversal(root):
if root:
postorder_traversal(root.left)
postorder_traversal(root.right)
print(root.data, end=" ")
# Example Usage
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
print("Inorder traversal:")
inorder_traversal(root) # Output: 4 2 5 1 3
print("\nPreorder traversal:")
preorder_traversal(root) # Output: 1 2 4 5 3
print("\nPostorder traversal:")
postorder_traversal(root) # Output: 4 5 2 3 1
๋ฐ๋ณต DFS (์คํ ์ฌ์ฉ)
DFS๋ ์คํ์ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต์ ์ผ๋ก ๊ตฌํํ ์๋ ์์ต๋๋ค. ๋ค์์ ๋ฐ๋ณต ์ ์ ์ํ์ ์์ ๋๋ค.
def iterative_preorder(root):
if root is None:
return
stack = [root]
while stack:
node = stack.pop()
print(node.data, end=" ")
# Push right child first so left child is processed first
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
#Example Usage (same tree as before)
print("\nIterative Preorder traversal:")
iterative_preorder(root)
DFS์ ์ฌ์ฉ ์ฌ๋ก
- ๋ ๋ ธ๋ ์ฌ์ด์ ๊ฒฝ๋ก ์ฐพ๊ธฐ: DFS๋ ๊ทธ๋ํ ๋๋ ํธ๋ฆฌ์์ ๊ฒฝ๋ก๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐพ์ ์ ์์ต๋๋ค. ๋คํธ์ํฌ(๊ทธ๋ํ๋ก ํํ๋จ)๋ฅผ ํตํด ๋ฐ์ดํฐ ํจํท์ ๋ผ์ฐํ ํ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด ๋ณด์ธ์. DFS๋ ์ฌ๋ฌ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๋๋ผ๋ ๋ ์๋ฒ ๊ฐ์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
- ์์ ์ ๋ ฌ: DFS๋ ๋ฐฉํฅ์ฑ ๋น์ํ ๊ทธ๋ํ(DAG)์ ์์ ์ ๋ ฌ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ผ๋ถ ์์ ์ด ๋ค๋ฅธ ์์ ์ ์์กดํ๋ ์์ ์ค์ผ์ค๋ง์ ์์ํด ๋ณด์ธ์. ์์ ์ ๋ ฌ์ ์ด๋ฌํ ์์กด์ฑ์ ์กด์คํ๋ ์์๋ก ์์ ์ ๋ฐฐ์ดํฉ๋๋ค.
- ๊ทธ๋ํ์์ ์ฌ์ดํด ๊ฐ์ง: DFS๋ ๊ทธ๋ํ์์ ์ฌ์ดํด์ ๊ฐ์งํ ์ ์์ต๋๋ค. ์ฌ์ดํด ๊ฐ์ง๋ ์์ ํ ๋น์์ ์ค์ํฉ๋๋ค. ํ๋ก์ธ์ค A๊ฐ ํ๋ก์ธ์ค B๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ํ๋ก์ธ์ค B๊ฐ ํ๋ก์ธ์ค A๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒฝ์ฐ ๊ต์ฐฉ ์ํ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.
- ๋ฏธ๋ก ํ๊ธฐ: DFS๋ ๋ฏธ๋ก๋ฅผ ํต๊ณผํ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ์ ํ์ฑ ๋ฐ ํ๊ฐ: ์ปดํ์ผ๋ฌ๋ ์ํ์ ์์ ํ์ฑํ๊ณ ํ๊ฐํ๊ธฐ ์ํด DFS ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
DFS์ ์ฅ์ ๋ฐ ๋จ์
์ฅ์ :
- ๊ตฌํ์ด ๊ฐ๋จํจ: ์ฌ๊ท์ ๊ตฌํ์ ์ข ์ข ๋งค์ฐ ๊ฐ๊ฒฐํ๊ณ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
- ํน์ ํธ๋ฆฌ์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ: DFS๋ ํ์ฌ ๊ฒฝ๋ก์ ๋ ธ๋๋ง ์ ์ฅํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๊น์ด ์ค์ฒฉ๋ ํธ๋ฆฌ์ ๊ฒฝ์ฐ BFS๋ณด๋ค ์ ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
- ๋น ๋ฅด๊ฒ ํด๊ฒฐ์ฑ ์ ์ฐพ์ ์ ์์: ์ํ๋ ํด๊ฒฐ์ฑ ์ด ํธ๋ฆฌ์ ๊น์ ๊ณณ์ ์๋ ๊ฒฝ์ฐ DFS๋ BFS๋ณด๋ค ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ต๋๋ค.
๋จ์ :
- ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅํ์ง ์์: DFS๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์์ง๋ง ์ต๋จ ๊ฒฝ๋ก๊ฐ ์๋ ์ ์์ต๋๋ค.
- ๋ฌดํ ๋ฃจํ ๊ฐ๋ฅ์ฑ: ํธ๋ฆฌ๊ฐ ์ ์คํ๊ฒ ๊ตฌ์ฑ๋์ง ์์ ๊ฒฝ์ฐ(์: ์ฌ์ดํด ํฌํจ), DFS๋ ๋ฌดํ ๋ฃจํ์ ๋น ์ง ์ ์์ต๋๋ค.
- ์คํ ์ค๋ฒํ๋ก์ฐ: ์ฌ๊ท์ ๊ตฌํ์ ๋งค์ฐ ๊น์ ํธ๋ฆฌ์ ๊ฒฝ์ฐ ์คํ ์ค๋ฒํ๋ก์ฐ ์ค๋ฅ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.
๋๋น ์ฐ์ ํ์ (BFS)
๋๋น ์ฐ์ ํ์(BFS)์ ํ์ฌ ๋ ๋ฒจ์ ๋ชจ๋ ์ด์ ๋ ธ๋๋ฅผ ํ์ํ ๋ค์ ๋ค์ ๋ ๋ฒจ์ ๋ ธ๋๋ก ์ด๋ํ๋ ํธ๋ฆฌ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ๋ฃจํธ์์ ์์ํ์ฌ ๋ ๋ฒจ๋ณ๋ก ํธ๋ฆฌ๋ฅผ ํ์ํฉ๋๋ค. BFS๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต์ ์ผ๋ก ๊ตฌํ๋ฉ๋๋ค.
BFS ์๊ณ ๋ฆฌ์ฆ
- ๋ฃจํธ ๋ ธ๋๋ฅผ ํ์ ์ถ๊ฐํฉ๋๋ค.
- ํ๊ฐ ๋น์ด ์์ง ์์ ๋์:
- ํ์์ ๋ ธ๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํฉ๋๋ค (์: ํด๋น ๊ฐ์ ์ถ๋ ฅ).
- ๋ ธ๋์ ๋ชจ๋ ์์์ ํ์ ์ถ๊ฐํฉ๋๋ค.
๊ตฌํ ์์ (Python)
from collections import deque
def bfs_traversal(root):
if root is None:
return
queue = deque([root])
while queue:
node = queue.popleft()
print(node.data, end=" ")
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
#Example Usage (same tree as before)
print("BFS traversal:")
bfs_traversal(root) # Output: 1 2 3 4 5
BFS์ ์ฌ์ฉ ์ฌ๋ก
- ์ต๋จ ๊ฒฝ๋ก ์ฐพ๊ธฐ: BFS๋ ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ์์ ๋ ๋ ธ๋ ์ฌ์ด์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅํฉ๋๋ค. ์์ ๋คํธ์ํน ์ฌ์ดํธ๋ฅผ ์์ํด ๋ณด์ธ์. BFS๋ ๋ ์ฌ์ฉ์ ๊ฐ์ ์ต๋จ ์ฐ๊ฒฐ์ ์ฐพ์ ์ ์์ต๋๋ค.
- ๊ทธ๋ํ ์ํ: BFS๋ ๊ทธ๋ํ๋ฅผ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ์น ํฌ๋กค๋ง: ๊ฒ์ ์์ง์ BFS๋ฅผ ์ฌ์ฉํ์ฌ ์น์ ํฌ๋กค๋งํ๊ณ ํ์ด์ง๋ฅผ ์์ธํํฉ๋๋ค.
- ๊ฐ์ฅ ๊ฐ๊น์ด ์ด์ ์ฐพ๊ธฐ: ์ง๋ฆฌ์ ๋งคํ์์ BFS๋ ์ฃผ์ด์ง ์์น์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ์คํ ๋, ์ฃผ์ ์ ๋๋ ๋ณ์์ ์ฐพ์ ์ ์์ต๋๋ค.
- ํ๋ฌ๋ ํ ์๊ณ ๋ฆฌ์ฆ: ์ด๋ฏธ์ง ์ฒ๋ฆฌ์์ BFS๋ ํ๋ฌ๋ ํ ์๊ณ ๋ฆฌ์ฆ("ํ์ธํธ ํต" ๋๊ตฌ ๋ฑ)์ ๊ธฐ์ด๋ฅผ ํ์ฑํฉ๋๋ค.
BFS์ ์ฅ์ ๋ฐ ๋จ์
์ฅ์ :
- ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅํจ: BFS๋ ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ์์ ํญ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ต๋๋ค.
- ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ธ๋๋ฅผ ์ฐพ๋ ๋ฐ ์ ํฉํจ: BFS๋ ์์ ๋ ธ๋์ ๊ฐ๊น์ด ๋ ธ๋๋ฅผ ์ฐพ๋ ๋ฐ ํจ์จ์ ์ ๋๋ค.
- ๋ฌดํ ๋ฃจํ ๋ฐฉ์ง: BFS๋ ๋ ๋ฒจ๋ณ๋ก ํ์ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ดํด์ด ์๋ ๊ทธ๋ํ์์๋ ๋ฌดํ ๋ฃจํ์ ๋น ์ง๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
๋จ์ :
- ๋ฉ๋ชจ๋ฆฌ ์ง์ฝ์ : BFS๋ ํ์ฌ ๋ ๋ฒจ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ ์ ์ฅํด์ผ ํ๋ฏ๋ก ํนํ ๋์ ํธ๋ฆฌ์ ๊ฒฝ์ฐ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ ์ ์์ต๋๋ค.
- DFS๋ณด๋ค ๋๋ฆด ์ ์์: ์ํ๋ ํด๊ฒฐ์ฑ ์ด ํธ๋ฆฌ์ ๊น์ ๊ณณ์ ์๋ ๊ฒฝ์ฐ BFS๋ ๊ฐ ๋ ๋ฒจ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ ํ์์ผ ๋ ๊น์ด ๋ค์ด๊ฐ๋ฏ๋ก DFS๋ณด๋ค ๋๋ฆด ์ ์์ต๋๋ค.
DFS์ BFS ๋น๊ต
๋ค์์ DFS์ BFS์ ์ฃผ์ ์ฐจ์ด์ ์ ์์ฝํ ํ์ ๋๋ค.
| ํน์ง | ๊น์ด ์ฐ์ ํ์ (DFS) | ๋๋น ์ฐ์ ํ์ (BFS) |
|---|---|---|
| ์ํ ์์ | ๋ฐฑํธ๋ํนํ๊ธฐ ์ ์ ๊ฐ ๊ฐ์ง๋ฅผ ๋ฐ๋ผ ๊ฐ๋ฅํ ํ ๋ฉ๋ฆฌ ํ์ | ๋ค์ ๋ ๋ฒจ๋ก ์ด๋ํ๊ธฐ ์ ์ ํ์ฌ ๋ ๋ฒจ์ ๋ชจ๋ ์ด์ ๋ ธ๋๋ฅผ ํ์ |
| ๊ตฌํ | ์ฌ๊ท์ ๋๋ ๋ฐ๋ณต์ (์คํ ์ฌ์ฉ) | ๋ฐ๋ณต์ (ํ ์ฌ์ฉ) |
| ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ | ์ผ๋ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ๊ฒ ์๋ชจ๋จ (๊น์ ํธ๋ฆฌ์ ๊ฒฝ์ฐ) | ์ผ๋ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ๋ง์ด ์๋ชจ๋จ (๋์ ํธ๋ฆฌ์ ๊ฒฝ์ฐ) |
| ์ต๋จ ๊ฒฝ๋ก | ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅํ์ง ์์ | ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅํจ (๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ์์) |
| ์ฌ์ฉ ์ฌ๋ก | ๊ฒฝ๋ก ์ฐพ๊ธฐ, ์์ ์ ๋ ฌ, ์ฌ์ดํด ๊ฐ์ง, ๋ฏธ๋ก ํ๊ธฐ, ์ ํ์ฑ | ์ต๋จ ๊ฒฝ๋ก ์ฐพ๊ธฐ, ๊ทธ๋ํ ์ํ, ์น ํฌ๋กค๋ง, ๊ฐ์ฅ ๊ฐ๊น์ด ์ด์ ์ฐพ๊ธฐ, ํ๋ฌ๋ ํ |
| ๋ฌดํ ๋ฃจํ ์ํ | ์ํ ๋์ (์ ์คํ ๊ตฌ์กฐํ ํ์) | ์ํ ๋ฎ์ (๋ ๋ฒจ๋ณ๋ก ํ์) |
DFS์ BFS ์ค ์ ํํ๊ธฐ
DFS์ BFS ์ค ์ ํ์ ํด๊ฒฐํ๋ ค๋ ํน์ ๋ฌธ์ ์ ์์ ์ค์ธ ํธ๋ฆฌ ๋๋ ๊ทธ๋ํ์ ํน์ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ์ ํ์ ๋์์ด ๋๋ ๋ช ๊ฐ์ง ์ง์นจ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- DFS๋ฅผ ์ฌ์ฉํด์ผ ํ ๋:
- ํธ๋ฆฌ๊ฐ ๋งค์ฐ ๊น๊ณ ํด๊ฒฐ์ฑ ์ด ๊น์ ๊ณณ์ ์์ ๊ฒ์ผ๋ก ์์๋ ๋.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฃผ์ ๊ด์ฌ์ฌ์ด๊ณ ํธ๋ฆฌ๊ฐ ๋๋ฌด ๋์ง ์์ ๋.
- ๊ทธ๋ํ์์ ์ฌ์ดํด์ ๊ฐ์งํด์ผ ํ ๋.
- BFS๋ฅผ ์ฌ์ฉํด์ผ ํ ๋:
- ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ์์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ์์ผ ํ ๋.
- ์์ ๋ ธ๋์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ธ๋๋ฅผ ์ฐพ์์ผ ํ ๋.
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฃผ์ ์ ์ฝ์ด ์๋๋ฉฐ ํธ๋ฆฌ๊ฐ ๋์ ๋.
์ด์ง ํธ๋ฆฌ๋ฅผ ๋์ด: ๊ทธ๋ํ์์์ DFS ๋ฐ BFS
์ฐ๋ฆฌ๋ ์ฃผ๋ก ํธ๋ฆฌ์ ๋งฅ๋ฝ์์ DFS์ BFS๋ฅผ ๋ ผํ์ง๋ง, ์ด ์๊ณ ๋ฆฌ์ฆ๋ค์ ๋ ธ๋๊ฐ ์์์ ์ฐ๊ฒฐ์ ๊ฐ์ง ์ ์๋ ๋ ์ผ๋ฐ์ ์ธ ์๋ฃ ๊ตฌ์กฐ์ธ ๊ทธ๋ํ์๋ ๋์ผํ๊ฒ ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ํต์ฌ ์์น์ ๋์ผํ์ง๋ง, ๊ทธ๋ํ๋ ์ฌ์ดํด์ ๋์ ํ ์ ์์ผ๋ฏ๋ก ๋ฌดํ ๋ฃจํ๋ฅผ ํผํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
๊ทธ๋ํ์ DFS์ BFS๋ฅผ ์ ์ฉํ ๋๋ ์ด๋ฏธ ํ์๋ ๋ ธ๋๋ฅผ ์ถ์ ํ๊ธฐ ์ํด "๋ฐฉ๋ฌธ" ์งํฉ ๋๋ ๋ฐฐ์ด์ ์ ์งํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. ์ด๋ ์๊ณ ๋ฆฌ์ฆ์ด ๋ ธ๋๋ฅผ ๋ค์ ๋ฐฉ๋ฌธํ์ฌ ์ฌ์ดํด์ ๊ฐํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
๊ฒฐ๋ก
๊น์ด ์ฐ์ ํ์(DFS)๊ณผ ๋๋น ์ฐ์ ํ์(BFS)์ ๊ณ ์ ํ ํน์ฑ๊ณผ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ํธ๋ฆฌ ๋ฐ ๊ทธ๋ํ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ์ปดํจํฐ ๊ณผํ์๋ ์ํํธ์จ์ด ์์ง๋์ด๋ผ๋ฉด ์ด๋ค์ ์๋ฆฌ, ๊ตฌํ, ์ฑ๋ฅ ํธ๋ ์ด๋์คํ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. ๋น๋ฉดํ ํน์ ๋ฌธ์ ๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ คํ์ฌ ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ๋ ๋ฐ ์ ํฉํ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ ์ ์์ต๋๋ค. DFS๋ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ๊ณผ ๊น์ ๊ฐ์ง ํ์์์ ํ์ํ ๋ฐ๋ฉด, BFS๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅํ๊ณ ๋ฌดํ ๋ฃจํ๋ฅผ ํผํ๋ฏ๋ก ์ด๋ค ๊ฐ์ ์ฐจ์ด์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ๋ค์ ๋ง์คํฐํ๋ฉด ๋ฌธ์ ํด๊ฒฐ ๋ฅ๋ ฅ์ด ํฅ์๋๊ณ ๋ณต์กํ ์๋ฃ ๊ตฌ์กฐ ๋ฌธ์ ๋ฅผ ์์ ๊ฐ ์๊ฒ ํด๊ฒฐํ ์ ์์ ๊ฒ์ ๋๋ค.