๐ ์๋ฃ ๊ตฌ์กฐ๋ ์ ๊ณต๋ถํด์ผํ๋
1. ์๋ฃ ๊ตฌ์กฐ๊ฐ ๋ฌด์์ธ๊ฐ
์๋ฃ ๊ตฌ์กฐ = Data + Structure = ์๋ฃ๋ค์ ์งํฉ
์ฆ, ์๋ฃ๊ฐ ๋ญ์ณ์๋ ์๊น์๋ฅผ ๋งํ๋ค.
์๋ฃ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๋ค์ ๊ด๊ณ๊ฐ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ ์๋ ์ผ์ ํ ๊ท์น์ ์ํด ๋์ด๋๋ค.
์๋ฃ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๋๋ก ์๋ฃ๋ฅผ ์กฐ์ง์ , ์ฒด๊ณ์ ์ผ๋ก ๊ตฌ๋ถํด์ ํํํ๊ฑฐ๋ค.
์ด๋ฐ ์์ผ๋ก ๋ฑ๋ฑ ๊ตฌ๋ถ์ง์ด์ ์์๊ฒ ๋์ ๊ฑฐ๋ ๋ง์ด๋ค.
2. ์๋ฃ ๊ตฌ์กฐ์ ๋ชฉ์
์๋ฃ๊ตฌ์กฐ์ ๋ชฉ์ ์ ํฌ๊ฒ 3๊ฐ์ง์ด๋ค.
1. ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ ๊ทผ
2. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํ
3. ๋ฌธ์ ํด๊ฒฐ ๋ฐ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ์ง์
๊ฐ๊ฐ ๋ค๋ฅธ ์ฑ ์ฅ์ด ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ์.
1๋ฒ ์ฑ ์ฅ์ ์ฑ ์ด ๋ฌด์์๋ก ๊ฝํ ์๊ธฐ ๋๋ฌธ์ ๋์ค์ ์ํ๋ ์ฑ ์ ์ฐพ๊ธฐ๊ฐ ์ด๋ ค์ธ ์ ์๋ค.
2๋ฒ ์ฑ ์ฅ์ ์นธ๋ง๋ค ๊ฐ์ ์์์ ์ฑ ์ ์ง์ดํ๋ค. ํ์ง๋ง ๊ฝ์ง ๋ชปํ๋ ์ฑ ๊ณผ ๋น ๊ณต๊ฐ์ด ๋ฐ์ํ๋ค.
3๋ฒ ์ฑ ์ฅ์ ์์ ๋ณ๋ก ์น์ ์ ๋๋์ด ์ฑ ์ ๋ถ๋ฅํ๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋ฆผ๋ง์ ์ค์นํ๋ ๊ณผ์ ์์ ์ฑ ์ฅ์ ๊ณต๊ฐ์ด ์ค์ด๋ค์๋ค.
์ฑ ์ฅ = ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ
์ฑ = ๋ฐ์ดํฐ
๋ผ๊ณ ๋ณผ ์ ์๋ค.
์์ ์์์ฒ๋ผ ์ํฉ๋ณ๋ก ํจ์จ์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ ๋ค ๋ฐ๋ก ์๋ค.
3. ์๋ฃ ๊ตฌ์กฐ์ ๋ด์ฉ, ์๋ฃ ๊ตฌ์กฐ์ ๋ชฉํ
์ฐ๋ฆฌ๋ ํ์ค์ ๋ฌธ์ ๋ฅผ ์ปดํจํฐ๋ก ํด๊ฒฐํ๊ณ ์ ํ๋ค. ํ์ง๋ง ์ปดํจํฐ์ ํ์ค ์ฌ์ด์๋ ํํํ๋ ๋ฐฉ๋ฒ์ ์ฐจ์ด๊ฐ ์๋ค.
์ด์ฒ๋ผ ์๋ฃ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์์๋ ์ปดํจํฐ์ ํ์ค์์๋ ์ฐจ์ด๊ฐ ์๋ค. ์ด๋ก ์ ์ธก๋ฉด์ ํ์ค์์ ์ผ์ด๋๋ ๊ฒ์ด๊ณ , ์ค์ ์ ์ธก๋ฉด์ ์ปดํจํฐ์์ ์๋ํ๋ ๊ฒ์ด๋ผ๊ณ ํ ์ ์๋ค.
๊ทธ๋ฆผ์์ ์ ์ ์๋ฏ์ด ์๋ฃ๊ตฌ์กฐ์ ๋ชฉํ๋ ํ์ค์์์ ๋ฐ์ดํฐ๋ฅผ ์ปดํจํฐ์์ ๊ตฌ์กฐํํ๊ณ ๊ทธ ๊ตฌ์กฐ ์์์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ๊ฐ ๊ตฌ์กฐ์ ํจ์จ์ฑ์ ์ธก์ ํ๋ ๊ฒ์ด๋ค.
4. ์๋ฃ์ ํํ์ ๋ฐ๋ฅธ ์๋ฃ ๊ตฌ์กฐ์ ๋ถ๋ฅ
์ด๋ ๊ฒ ์ด๋ง๋ฌด์ํ๊ฒ ๋ง๋ค.
์ด ์ค์ ๊ธฐ๋ณธ์ด ๋๋ ์๋ฃ๊ตฌ์กฐ๋ถํฐ ๊ณต๋ถํ๋ ๊ฒ์ด ์ข๋ค.
1๏ธโฃ ์ ํ ๊ตฌ์กฐ
์ ํ ์๋ฃ๊ตฌ์กฐ๋ ํ ๊ฐ์ ๋ฐ์ดํฐ ๋ค์ ํ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ผ์ค๋ ๊ตฌ์กฐ์ด๋ค.
๋ด๋ถ์ ๊ฐ ๋ฐ์ดํฐ ๋ค์ 1:1 ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๋ํ์ ์ผ๋ก ๋ฐฐ์ด(Array) ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List) ์คํ (Stack) ํ (Queue) ๋ฐํฌ (Deque,Double-Ended Queue) ์๊ณ , ์ฐจ๊ทผ ์ฐจ๊ทผ ํ๋์ฉ ํฌ์คํ ํด๋๊ฐ์ผ๊ฒ ๋ค.
๋ฐฐ์ด(Array) | ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List) | ์คํ (Stack) | ํ (Queue) | ๋ฐํฌ (Deque, Double-Ended Queue) |
|
์ ์ | ๋์ผํ ํ์ ์ ์์๋ค์ด ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋ ์๋ฃ๊ตฌ์กฐ | ๊ฐ ์์๊ฐ ๋ฐ์ดํฐ์ ๋ค์ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ก ๊ตฌ์ฑ๋ ์๋ฃ๊ตฌ์กฐ | ํ์ ์ ์ถ(LIFO, Last In First Out) ์์น์ ๋ฐ๋ฅด๋ ์๋ฃ๊ตฌ์กฐ | ์ ์ ์ ์ถ(FIFO, First In First Out) ์์น์ ๋ฐ๋ฅด๋ ์๋ฃ๊ตฌ์กฐ | ์์ชฝ ๋์์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ๋ชจ๋ ๊ฐ๋ฅํ ์๋ฃ๊ตฌ์กฐ |
์ข ๋ฅ | 1์ฐจ์ ๋ฐฐ์ด: ๋จ์ผ ํ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด. ๋ค์ฐจ์ ๋ฐฐ์ด: ์ฌ๋ฌ ํ๊ณผ ์ด๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด (์: 2์ฐจ์ ๋ฐฐ์ด, 3์ฐจ์ ๋ฐฐ์ด). |
๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Singly Linked List): ๊ฐ ๋
ธ๋๊ฐ ๋ค์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Doubly Linked List): ๊ฐ ๋ ธ๋๊ฐ ์ด์ ๋ ธ๋์ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Circular Linked List): ๋ง์ง๋ง ๋ ธ๋๊ฐ ์ฒซ ๋ฒ์งธ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. |
๋ฐฐ์ด ๊ธฐ๋ฐ ์คํ: ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ์คํ์ ๊ตฌํ. ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๊ธฐ๋ฐ ์คํ: ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์คํ์ ๊ตฌํ. |
์ผ๋ฐ ํ (Regular Queue): ๊ธฐ๋ณธ์ ์ธ ํ ๊ตฌ์กฐ. ์ฐ์ ์์ ํ (Priority Queue): ๊ฐ ์์์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๊ณ , ์ฐ์ ์์๊ฐ ๋์ ์์๊ฐ ๋จผ์ ์ฒ๋ฆฌ๋จ. ์ํ ํ (Circular Queue): ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ํ๋ฅผ ๊ตฌํํ๊ณ , ๋๊ณผ ์์์ด ์ฐ๊ฒฐ๋ ๊ตฌ์กฐ. |
๋ฐฐ์ด ๊ธฐ๋ฐ ๋ฐํฌ: ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ฐํฌ๋ฅผ ๊ตฌํ. ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๊ธฐ๋ฐ ๋ฐํฌ: ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐํฌ๋ฅผ ๊ตฌํ. |
ํน์ง | - ์ธ๋ฑ์ค๋ฅผ ํตํด ์์์ ์ง์ ์ ๊ทผ ๊ฐ๋ฅ. - ๊ณ ์ ๋ ํฌ๊ธฐ, ํฌ๊ธฐ ๋ณ๊ฒฝ ๋ถ๊ฐ. - ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจ์จ์ , ์ ๊ทผ ์๋ ๋น ๋ฆ. |
- ๋์ ํฌ๊ธฐ ์กฐ์ ๊ฐ๋ฅ. - ์ฝ์ , ์ญ์ ๊ฐ ๋ฐฐ์ด๋ณด๋ค ํจ์จ์ . - ์์ ์ ๊ทผ ์๋๊ฐ ๋๋ฆผ. |
- push: ์์๋ฅผ ์คํ์ ๋งจ ์์ ์ถ๊ฐ. - pop: ์คํ์ ๋งจ ์ ์์๋ฅผ ์ ๊ฑฐ. - peek: ์คํ์ ๋งจ ์ ์์๋ฅผ ํ์ธ. - ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ๊ฐ๋จํจ. |
- enqueue: ์์๋ฅผ ํ์ ๋ค์ ์ถ๊ฐ. - dequeue: ํ์ ์ ์์๋ฅผ ์ ๊ฑฐ. - ์์ ์ถ๊ฐ์ ์ ๊ฑฐ๊ฐ ํจ์จ์ . |
- ์์ชฝ ๋์์ ์ฝ์
๊ณผ ์ญ์ ๊ฐ ๊ฐ๋ฅ. - ์ ์ฐํ ์์ ์ถ๊ฐ์ ์ ๊ฑฐ. - ์ผ๋ฐ ํ์ ์คํ์ ๊ธฐ๋ฅ์ ๋ชจ๋ ํฌํจ. |
2๏ธโฃ ๋น์ ํ ๊ตฌ์กฐ
๋น์ ํ ์๋ฃ๊ตฌ์กฐ๋ ํ๊ฐ์ ๋ฐ์ดํฐ ๋ค์ ์ฌ๋ฌ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ผ์ค๋๊ฒ์ ๋งํ๋ฉฐ ๊ฐ ๋ฐ์ดํฐ๊ฐ 1:n ๋๋ n:n์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํํํ๊ธฐ์ ์ ์ ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๋ํ์ ์ผ๋ก ํธ๋ฆฌ (Tree) ๊ทธ๋ํ (Graph) ํ (Heap) ํธ๋ผ์ด (Trie) ํด์ ํ ์ด๋ธ (Hash Table) ์ด ์๋ค.
ํธ๋ฆฌ (Tree) | ๊ทธ๋ํ (Graph) | ํ (Heap) | ํธ๋ผ์ด (Trie) | ํด์ ํ ์ด๋ธ (Hash Table) | |
์ ์ | ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๋น์ ํ ์๋ฃ๊ตฌ์กฐ๋ก, ๋ฃจํธ ๋ ธ๋์์ ์์ํ์ฌ ์์ ๋ ธ๋๋ก ๋ป์ด๋๊ฐ๋ ๊ตฌ์กฐ | ์ ์ (๋ ธ๋)๊ณผ ์ด๋ค์ ์ฐ๊ฒฐํ๋ ๊ฐ์ (์ฃ์ง)์ผ๋ก ๊ตฌ์ฑ๋ ์๋ฃ๊ตฌ์กฐ | ์์ ์ด์ง ํธ๋ฆฌ์ ์ผ์ข ์ผ๋ก, ํน์ ์์ฑ์ ๋ง์กฑํ๋ ์๋ฃ๊ตฌ์กฐ | ๋ฌธ์์ด์ ์ ์ฅํ๊ณ ํจ์จ์ ์ผ๋ก ๊ฒ์ํ๊ธฐ ์ํ ํธ๋ฆฌ ๊ธฐ๋ฐ ์๋ฃ๊ตฌ์กฐ | ํค-๊ฐ ์์ ์ ์ฅํ๊ณ ๋น ๋ฅด๊ฒ ๊ฒ์ํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ |
์ข ๋ฅ | ์ด์ง ํธ๋ฆฌ (Binary Tree): ๊ฐ ๋
ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์ ๋
ธ๋๋ฅผ ๊ฐ์ง. ์ด์ง ํ์ ํธ๋ฆฌ (Binary Search Tree): ์ด์ง ํธ๋ฆฌ์ ์ผ์ข ์ผ๋ก, ์ผ์ชฝ ์์์ ๋ถ๋ชจ๋ณด๋ค ์๊ณ , ์ค๋ฅธ์ชฝ ์์์ ๋ถ๋ชจ๋ณด๋ค ํผ. AVL ํธ๋ฆฌ: ์๊ฐ ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ. B-ํธ๋ฆฌ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ํ์ผ ์์คํ ์ ์ฌ์ฉ๋๋ ๊ท ํ ํธ๋ฆฌ. |
๋ฌด๋ฐฉํฅ ๊ทธ๋ํ (Undirected Graph): ๊ฐ์ ์ ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ. ๋ฐฉํฅ ๊ทธ๋ํ (Directed Graph, Digraph): ๊ฐ์ ์ ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ. ๊ฐ์ค ๊ทธ๋ํ (Weighted Graph): ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ. ๋น๊ฐ์ค ๊ทธ๋ํ (Unweighted Graph): ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ. |
์ต๋ ํ (Max Heap): ๋ถ๋ชจ ๋
ธ๋๊ฐ ์์ ๋
ธ๋๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ํธ๋ฆฌ. ์ต์ ํ (Min Heap): ๋ถ๋ชจ ๋ ธ๋๊ฐ ์์ ๋ ธ๋๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ํธ๋ฆฌ. |
ํ์ค ํธ๋ผ์ด: ๊ฐ ๋
ธ๋๊ฐ ์ํ๋ฒณ ๋ฌธ์ ๋๋ ๋ค๋ฅธ ๋ฌธ์๋ฅผ ์์์ผ๋ก ๊ฐ์ง. ์์ถ ํธ๋ผ์ด: ๋จ์ผ ์์ ๋ ธ๋๋ฅผ ๋ณํฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค์ธ ํธ๋ผ์ด. ํ ๋ฅด๋๋ฆฌ ๊ฒ์ ํธ๋ฆฌ (Ternary Search Trie): ๊ฐ ๋ ธ๋๊ฐ ์ธ ๊ฐ์ ์์์ ๊ฐ์ง(์์ ๊ฐ, ๋์ผ ๊ฐ, ํฐ ๊ฐ). |
์ฒด์ด๋ (Chaining): ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ํด๊ฒฐ ์คํ ์ด๋๋ ์ฑ (Open Addressing): ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๋ค๋ฅธ ํด์ ๋ฒํท์ ์ฐพ์ ๋๋ธ ํด์ฑ (Double Hashing): ๋ ๋ฒ์งธ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ถฉ๋ ํด๊ฒฐ |
ํน์ง | - ๋
ธ๋ ๊ฐ ๊ณ์ธต ๊ด๊ณ. - ๋ค์ํ ํํ๋ก ํ์ฅ ๊ฐ๋ฅ. - ํจ์จ์ ์ธ ํ์, ์ฝ์ , ์ญ์ ์ฐ์ฐ. |
- ๋ณต์กํ ๊ด๊ณ๋ฅผ ํํ ๊ฐ๋ฅ. - ๋คํธ์ํฌ, ๊ฒฝ๋ก ์ฐพ๊ธฐ ๋ฑ์ ์ฌ์ฉ. - ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ ๊ฐ๋ฅ (DFS, BFS, ๋ค์ต์คํธ๋ผ ๋ฑ). |
- ์ต๋๊ฐ ๋๋ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ถ์ถ ๊ฐ๋ฅ. - ์ฐ์ ์์ ํ ๊ตฌํ์ ์ฌ์ฉ. - ํจ์จ์ ์ธ ์ฝ์ , ์ญ์ ์ฐ์ฐ. |
- ๋ฌธ์์ด ๊ฒ์๊ณผ ์๋ ์์ฑ ๊ธฐ๋ฅ์์ ๋ฐ์ด๋จ. - ์ค๋ณต์ ํผํ๊ณ ๊ณต๊ฐ ํจ์จ์ . - ๋ฌธ์์ด ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉ. |
- ํ๊ท ์ ์ผ๋ก O(1)์ ์๊ฐ ๋ณต์ก๋๋ก ๋น ๋ฅธ ๊ฒ์. - ํค ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์ ๊ทผ์ ํจ์จ์ . - ์ถฉ๋ ํด๊ฒฐ ์ ๋ต ํ์. |
์๊ฐ๋ณต์ก๋ ์ ๋ฆฌํ -> ๋๋ณด๊ธฐ
5. ์๋ฃ ๊ตฌ์กฐ ์ ํ ๊ธฐ์ค
๊ทธ๋ผ ์๋ฃ ๊ตฌ์กฐ ์ ํ ๊ธฐ์ค์ด ๋ญ๊ฐ?
โ ๋ฐ์ดํฐ ์ ๊ทผ ํจํด
- ๋ฐฐ์ด(Array)์ ์ธ๋ฑ์ค๋ฅผ ํตํ ๋น ๋ฅธ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง, ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ์ด๋ ต๋ค. ๋ฐ๋ฉด์, ๋งํฌ๋ ๋ฆฌ์คํธ(Linked List)๋ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ์ฉ์ดํ์ง๋ง ๋ฐ์ดํฐ ์ ๊ทผ ์๋๊ฐ ๋๋ฆด ์ ์๋ค.
โ ์๊ฐ ๋ณต์ก๋ & ๊ณต๊ฐ ๋ณต์ก๋
- ํด์ ํ ์ด๋ธ(Hash Table)์ ํ๊ท ์ ์ผ๋ก O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง์ง๋ง, ์ต์ ์ ๊ฒฝ์ฐ O(n)์ด ๋ ์ ์๋ค. ์ด์ง ๊ฒ์ ํธ๋ฆฌ(Binary Search Tree)๋ ํ๊ท ์ ์ผ๋ก O(log n)์ ๊ฒ์, ์ฝ์ , ์ญ์ ์๊ฐ์ด ์์๋๋ค.
- ๋ฐฐ์ด์ ๊ณ ์ ๋ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ๋งํฌ๋ ๋ฆฌ์คํธ๋ ๊ฐ ๋ ธ๋๊ฐ ์ถ๊ฐ์ ์ธ ํฌ์ธํฐ๋ฅผ ํ์๋ก ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ์ฆ๊ฐํ ์ ์๋ค.
โ ๋ฐ์ดํฐ์ ํฌ๊ธฐ์ ํํ
- ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ, ๋ฐฐ์ด๊ณผ ๊ฐ์ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๊ตฌํ๋ ์๋ฃ ๊ตฌ์กฐ๋ ๋ถ์ ํฉํ ์ ์๋ค. ํธ๋ฆฌ(Tree)๋ ๊ทธ๋ํ(Graph)๋ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ ๋ฆฌํ๋ค.
โ ํน์ ์ฐ์ฐ์ ๋น๋
- ํน์ ์ฐ์ฐ(์ฝ์ , ์ญ์ , ๊ฒ์ ๋ฑ)์ ๋น๋๋ฅผ ๊ณ ๋ คํ์ฌ ์ต์ ์ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ค. ์๋ฅผ ๋ค์ด, ํ(Queue)๋ ์คํ(Stack)์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ์ ์ ํฉํ๋ค.
โ ๋์์ฑ ์ ์ด
- ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์ค๋ ๋ ์์ ์ฑ์ ์ ๊ณตํ๋ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ค.์๋ฅผ ๋ค์ด, ConcurrentHashMap์ ๋์์ฑ์ ๊ณ ๋ คํ ํด์ ํ ์ด๋ธ์ด๋ค.
โ ์ฌ์ฉ ์ฉ์ด์ฑ ๋ฐ ์ ์ง๋ณด์
- ๋ณต์กํ ์๋ฃ ๊ตฌ์กฐ๋ ๊ตฌํ ๋ฐ ๋๋ฒ๊น ์ด ์ด๋ ค์ธ ์ ์์ผ๋ฏ๋ก, ๊ฐ๋จํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ ํธํ๋ ๊ฒ์ด ์ ์ง ๋ณด์ ์ธก๋ฉด์์ ์ ๋ฆฌํ ์ ์๋ค.
โ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๊ตฌ ์ฌํญ
- ๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ณ ์ ํ ์๊ตฌ ์ฌํญ๊ณผ ์ ์ฝ ์กฐ๊ฑด์ ๊ฐ์ง๋ฏ๋ก, ์ด์ ๋ง๋ ์ต์ ์ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๐ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌด์์ธ๊ฐ
์๊ณ ๋ฆฌ์ฆ์ ๋ ์ํผ๋ค.
์๊ณ ๋ฆฌ์ฆ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ณ์ฐ ์ ์ฐจ์ด์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๋ํ ์์์ด๋ค.
์๋ฃ๊ตฌ์กฐ์ ํน์ฑ์ ๋ฐ๋ผ ๋ฌธ์ ๋ฅผ ๋น ๋ฅด๊ณ , ํจ์จ์ ์ธ ๋ฌธ์ ํ์ด ๋ฐฉ๋ฒ์ ์ ํํ๊ฒ ๋๋ค.
๋ง์ฝ์ ์ด๋ก์ ์ฑ (5)์ ์ฐพ๊ณ ์ ํ๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด
2๋ฒ ์ฑ ์ฅ์ ๊ฒฝ์ฐ, 2๋ฒ์งธ ์นธ ๐๐ป 5๋ฒ์งธ ์ฑ ์ ์ฐพ๊ฒ ๋๋ค.
3๋ฒ ์ฑ ์ฅ์ ๊ฒฝ์ฐ, ์ด๋ก์ ๐๐ป ๊ฐ์ฅ ๋ง์ง๋ง์ ์์นํ ์ฑ ์ ์ฐพ๊ฒ ๋๋ค.
์ด๋ ๋ฏ ์๋ฃ๊ตฌ์กฐ์ ๋ฐ๋ผ ์๊ณ ๋ฆฌ์ฆ(๋ฐฉ์)์ด ๋ค๋ฅด๊ฒ ๋๋ค.
๋ฐ๋ผ์, ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ ํ์ต์ ํ๋์ ์ธํธ๋ผ๊ณ ํ ์ ์๋ค.
ํ๋ก๊ทธ๋จ = ์๋ฃ๊ตฌ์กฐ + ์๊ณ ๋ฆฌ์ฆ
=> ์ต๋๊ฐ ํ์ ํ๋ก๊ทธ๋จ = ๋ฐฐ์ด + ์์ฐจํ์
์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ
- ๊ตฌํ: ์ฌ๊ท์ ์๊ณ ๋ฆฌ์ฆ, ์ฐ์ญ์ ์๊ณ ๋ฆฌ์ฆ, ๊ฒฐ์ ๋ก ์ ์๊ณ ๋ฆฌ์ฆ, ๊ทผ์ฌ ์๊ณ ๋ฆฌ์ฆ, ์์ ์๊ณ ๋ฆฌ์ฆ ๋ฑ.
- ์ค๊ณ: ๋ฌด์ฐจ๋ณ ๋์ ๊ณต๊ฒฉ, ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ, ๊ทธ๋ํ ์ํ, ๋ถ๊ธฐ ํ์ ๋ฒ, ํ๋ฅ ์ ์๊ณ ๋ฆฌ์ฆ, ๋ฆฌ๋์ , ๋ฐฑํธ๋ํน ๋ฑ.
- ์ต์ ํ ๋ฌธ์ : ์ ํ ๊ณํ๋ฒ, ๋์ ๊ณํ๋ฒ, ํ์ ์๊ณ ๋ฆฌ์ฆ, ํด๋ฆฌ์คํฑ ํจ์ ๋ฑ.
- ์ด๋ก ์ ๋ถ์ผ: ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ, ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ, ์์น ์๊ณ ๋ฆฌ์ฆ, ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ, ๋ฌธ์์ด ์๊ณ ๋ฆฌ์ฆ, ์ํธํ์ ์๊ณ ๋ฆฌ์ฆ, ๊ธฐ๊ณ ํ์ต, ๋ฐ์ดํฐ ์์ถ ๋ฑ.
๐ Ref