๋ํ์ ์๋ฃ๊ตฌ์กฐ ๋ฐ ์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ
์ต๊ทผ์ ์๋ฃ๊ตฌ์กฐ ๋ถ๋ฅ ๋์, ๋ฐฐ์ด(array), ์ฐ๊ฒฐ ๋ฆฌ์คํธ(linked list), ์คํ(stack), ์ฌ๊ทํจ์์ ์คํ ๋ฉ๋ชจ๋ฆฌ, ํ(queue), ๋ฉํฐ์ค๋ ๋ฉ๊ณผ ํ์ ๋ํด ๋ค์ ๊ณต๋ถํ๋ค. ์ด ์ธ์๋ ํด์ํ ์ด๋ธ, ๊ทธ๋ํ, ํธ๋ฆฌ, ํ ๋ฑ ์ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํฌํจํด ์ค์ ์๋ฃ๊ตฌ์กฐ 8๊ฐ๋ฅผ ์ ๋ฆฌํด๋ณด๋ คํ๋ค.
0. ์๋ฃ๊ตฌ์กฐ ๋ถ๋ฅ ๋์
์๋ฃ๊ตฌ์กฐ๋ ํฌ๊ฒ ์ ํ(Linear) ์๋ฃ๊ตฌ์กฐ์ ๋น์ ํ(Non-linear) ์๋ฃ๊ตฌ์กฐ๋ก ๋ถ๋ฅ๋๋ค
- ์ ํ ์๋ฃ๊ตฌ์กฐ:
๋ฐฐ์ด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ์คํ, ํ ๋ฑ์ด ๋ํ์ - ํน์ง: ๋ฉ๋ชจ๋ฆฌ ์์ ์ฐ์์ ๋๋ ์์ฐจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉฐ, ์ฝ์ /์ญ์ ์ฐ์ฐ์ด ํ์ชฝ ๋ ๋๋ ์ค๊ฐ์์ ์ด๋ฃจ์ด์ง
- ๋น์ ํ ์๋ฃ๊ตฌ์กฐ:
ํธ๋ฆฌ, ํ, ๊ทธ๋ํ ๋ฑ์ด ์์ผ๋ฉฐ, ๊ณ์ธต์ ๋๋ ๋คํธ์ํฌ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ- ํน์ง: ๋ ธ๋๋ค ๊ฐ์ ๊ด๊ณ๊ฐ ๊ณ์ธต์ (ํธ๋ฆฌ, ํ) ๋๋ ์์(๊ทธ๋ํ)๋ก ์ฐ๊ฒฐ๋์ด ์์ด ๋ณต์กํ ๋ฐ์ดํฐ ๊ด๊ณ๋ฅผ ํํํ ์ ์์
๋ํ ํด์ํ
์ด๋ธ์ ํค-๊ฐ ์์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์๋ฃ๊ตฌ์กฐ๋ก, ์ผ๋ฐ์ ์ผ๋ก ๋น ๋ฅธ ๊ฒ์๊ณผ ์ฝ์
์ ์ํด ์ฌ์ฉ๋จ
1. ๋ฐฐ์ด (Array)
- ์ ์:
๋์ผํ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ - ํน์ง:
- ์ฅ์ :
- ์ธ๋ฑ์ค๋ฅผ ํตํ **O(1)**์ ๋น ๋ฅธ ์ ๊ทผ ์๋
- ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ๋จ์ํจ
- ๋จ์ :
- ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์์ด ๋์ ํฌ๊ธฐ ์กฐ์ ์ด ์ด๋ ต๊ฑฐ๋, ๋ณ๋์ ๋์ ๋ฐฐ์ด ๊ตฌํ์ด ํ์ํจ
- ์ฝ์ /์ญ์ ์ ์ ์ฒด ์์์ ์ด๋์ด ํ์ํ ์ ์์
- ์ฅ์ :
- ํ์ฉ:
๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ, ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ์ด ์๋ฃ๊ตฌ์กฐ ๋ฑ
2. ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Linked List)
- ์ ์:
๊ฐ ๋ ธ๋๊ฐ ๋ฐ์ดํฐ์ ๋ค์ ๋ ธ๋์ ๋ํ ํฌ์ธํฐ(์ฐธ์กฐ)๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ ธ๋๋ค์ด ์ฐ๊ฒฐ๋ ํํ์ ์๋ฃ๊ตฌ์กฐ - ํน์ง:
- ์ฅ์ :
- ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ผ๋ก ํฌ๊ธฐ ์กฐ์ ์ด ์์ ๋ก์
- ์ฝ์ /์ญ์ ๊ฐ ๋น ๋ฆ (ํนํ ๋ฆฌ์คํธ ์ค๊ฐ์์) – ํฌ์ธํฐ ์กฐ์๋ง์ผ๋ก ๊ฐ๋ฅ
- ๋จ์ :
- ์์ ์ ๊ทผ์ด ์ด๋ ต๊ณ , ์์ฐจ ์ ๊ทผ(O(n))์ด ํ์ํจ
- ๊ฐ ๋ ธ๋์ ์ถ๊ฐ์ ์ธ ํฌ์ธํฐ ์ ์ฅ ๊ณต๊ฐ ํ์
- ์ฅ์ :
- ํ์ฉ:
์คํ, ํ์ ๋ด๋ถ ๊ตฌํ, ๋ฐ์ดํฐ ์ ์ฅ ์ ๋น๋ฒํ ์ฝ์ /์ญ์ ์์ ๋ฑ
3. ์คํ (Stack)
- ์ ์:
ํ์ ์ ์ถ(LIFO, Last In First Out) ์์น์ ๋ฐ๋ฅด๋ ์ ํ ์๋ฃ๊ตฌ์กฐ - ์ฃผ์ ์ฐ์ฐ:
- Push: ์คํ์ top์ ์์ ์ฝ์
- Pop: ์คํ์ top์์ ์์ ์ญ์
- ํ์ฉ:
- ํจ์ ํธ์ถ ์ ์ฌ์ฉํ๋ ์ฝ ์คํ
- undo/redo ๊ธฐ๋ฅ, ๊ดํธ ๊ฒ์ฌ, ๊น์ด ์ฐ์ ํ์(DFS) ๋ฑ
๐ ์ฌ๊ทํจ์์ ์คํ ๋ฉ๋ชจ๋ฆฌ
- ์ฌ๊ท ํจ์:
์๊ธฐ ์์ ์ ํธ์ถํ๋ ํจ์๋ก, ๋ฌธ์ ๋ฅผ ๋ ์์ ํ์ ๋ฌธ์ ๋ก ๋๋ ์ ํด๊ฒฐํจ - ์คํ ๋ฉ๋ชจ๋ฆฌ์์ ๊ด๊ณ:
- ๊ฐ ์ฌ๊ท ํธ์ถ ์ ํจ์์ ์ํ(๋งค๊ฐ๋ณ์, ์ง์ญ ๋ณ์, ๋ฐํ ์ฃผ์ ๋ฑ)๊ฐ ์คํ ํ๋ ์์ผ๋ก ์คํ์ ์ ์ฅ๋ฉ๋๋ค.
- **์ข ๋ฃ ์กฐ๊ฑด(Base Case)**์ ๋๋ฌํ๋ฉด ํธ์ถ์ด ์ข ๋ฃ๋๊ณ , ์คํ ํ๋ ์์ด ํ๋์ฉ pop๋์ด ๊ฒฐ๊ณผ๊ฐ ์ฐจ๋ก๋ก ๋ฐํ๋ฉ๋๋ค.
- ์ฌ๊ท ๊น์ด๊ฐ ๋๋ฌด ๊น์ผ๋ฉด ์คํ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ ์ ์์
- ์์ :
ํฉํ ๋ฆฌ์ผ, ํผ๋ณด๋์น ์์ด ๋ฑ์ด ๋ํ์ ์ธ ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ
4. ํ (Queue)
- ์ ์:
์ ์ ์ ์ถ(FIFO, First In First Out) ์์น์ ๋ฐ๋ฅด๋ ์ ํ ์๋ฃ๊ตฌ์กฐ - ์ฃผ์ ์ฐ์ฐ:
- Enqueue: ํ์ rear(๋ค์ชฝ)์ ์์ ์ฝ์
- Dequeue: ํ์ front(์์ชฝ)์์ ์์ ์ญ์
- ํ์ฉ:
- ์์ ๋๊ธฐ์ด, ์ด๋ฒคํธ ์ฒ๋ฆฌ, ๋๋น ์ฐ์ ํ์(BFS) ๋ฑ
- Python์ ๊ฒฝ์ฐ queue.Queue ๋๋ collections.deque๋ฅผ ์ฌ์ฉํด ๊ตฌํํ ์ ์์ต๋๋ค.
๐ ๋ฉํฐ์ค๋ ๋ฉ๊ณผ ํ
- ๋ฉํฐ์ค๋ ๋ฉ:
ํ๋์ ํ๋ก์ธ์ค ๋ด์์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์คํ๋์ด ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ๋์์ ์ฌ๋ฌ ์์ ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ํจ - ํ์์ ๊ฒฐํฉ:
- ์์ฐ์-์๋น์ ํจํด:
- ์์ฐ์ ์ค๋ ๋: ์์ (๋ฐ์ดํฐ, ์์ฒญ)์ ํ์ ์ถ๊ฐ
- ์๋น์ ์ค๋ ๋: ํ์์ ์์ ์ ๊บผ๋ด์ด ์ฒ๋ฆฌ
- ์ค๋ ๋ ์์ ํ:
- ๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์์๋ ๋๊ธฐํ๊ฐ ํ์ํ๋ฐ, ์ค๋ ๋ ์์ ํ ํ(์: Java์ ConcurrentLinkedQueue, Python์ queue.Queue)๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅ
- ์์ฐ์-์๋น์ ํจํด:
- ์์ ์ฝ๋:
- Python์์๋ threading ๋ชจ๋๊ณผ queue.Queue๋ฅผ ํ์ฉ
- Java์์๋ ExecutorService์ ์ค๋ ๋ ์์ ํ๋ฅผ ํ์ฉํ์ฌ ๊ตฌํ
5. ํด์ํ ์ด๋ธ (Hash Table)
- ์ ์:
ํด์ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณํํ ๊ฐ์ ์์ธ(index)์ผ๋ก ์ผ์ ํค(key)์ ๋ฐ์ดํฐ(value)๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ - ํน์ง:
- ํ๊ท O(1)์ ๊ฒ์, ์ฝ์ , ์ญ์ ์๋๋ฅผ ๋ณด์ฅ
- ํด์ ์ถฉ๋(Collision) ํด๊ฒฐ ๊ธฐ๋ฒ: ์ฒด์ด๋, ์คํ ์ด๋๋ ์ฑ ๋ฑ
- ํ์ฉ:
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค, ์บ์, ๋์ ๋๋ฆฌ ๊ตฌํ ๋ฑ
6. ๊ทธ๋ํ (Graph)
- ์ ์:
๋ ธ๋(์ ์ )์ ๊ฐ์ (์ฐ๊ฒฐ)์ผ๋ก ๊ตฌ์ฑ๋ ๋น์ ํ ์๋ฃ๊ตฌ์กฐ - ์ ํ:
- ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ: ๊ฐ์ ์ด ๋ฐฉํฅ์ฑ์ ๊ฐ์ง ์์
- ์ ๋ฐฉํฅ ๊ทธ๋ํ: ๊ฐ์ ์ ๋ฐฉํฅ์ฑ์ด ์์
- ๊ฐ์ค์น ๊ทธ๋ํ: ๊ฐ์ ์ ๊ฐ์ค์น(๋น์ฉ)๊ฐ ์์
- ํ์ฉ:
- ์์ ๋คํธ์ํฌ, ์ง๋(์ต๋จ ๊ฒฝ๋ก), ์น ํฌ๋กค๋ง ๋ฑ
- ํ์ ์๊ณ ๋ฆฌ์ฆ: ๋๋น ์ฐ์ ํ์(BFS), ๊น์ด ์ฐ์ ํ์(DFS)
7. ํธ๋ฆฌ (Tree)
- ์ ์:
๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๋น์ ํ ์๋ฃ๊ตฌ์กฐ๋ก, ํ๋์ ๋ฃจํธ ๋ ธ๋์ ์ฌ๋ฌ ์์ ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. - ์ข
๋ฅ:
- ์ด์ง ํธ๋ฆฌ(Binary Tree) ๋ฐ ์ด์ง ํ์ ํธ๋ฆฌ(BST)
- AVL ํธ๋ฆฌ, ๋ ๋-๋ธ๋ ํธ๋ฆฌ ๋ฑ ๊ท ํ ์กํ ํธ๋ฆฌ
- ํ์ฉ:
- ํ์ผ ์์คํ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค, ํ์ฑ, ๊ฒ์ AI ๋ฑ
- ํธ๋ฆฌ ์ํ ๋ฐฉ๋ฒ: ์ ์(preorder), ์ค์(inorder), ํ์(postorder)
8. ํ (Heap)
- ์ ์:
์์ ์ด์ง ํธ๋ฆฌ ํํ์ ์๋ฃ๊ตฌ์กฐ๋ก, ๊ฐ ๋ถ๋ชจ ๋ ธ๋๊ฐ ์์ ๋ ธ๋๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค๋ ํน์ฑ์ ๊ฐ์ง๋๋ค.- ์ต๋ ํ(Max Heap): ๋ถ๋ชจ ๋ ธ๋๊ฐ ์์ ๋ ธ๋๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์
- ์ต์ ํ(Min Heap): ๋ถ๋ชจ ๋ ธ๋๊ฐ ์์ ๋ ธ๋๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์
- ํน์ง ๋ฐ ํ์ฉ:
- ์ฐ์ ์์ ํ: ํ์ ์ฌ์ฉํ์ฌ ์ฐ์ ์์ ๊ธฐ๋ฐ ์์ ์ฒ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ํ
- ํ ์ ๋ ฌ(Heapsort): ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํ ๋ฐฉ๋ฒ
๋ฐ์ํ
'๐ COMPUTER SCIENCE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ด ์ธ์ด๋ก ์ ๋ฆฌํ๋ ๋จธ์ ๋ฌ๋1 (5) | 2024.12.11 |
---|
๋๊ธ