๐ก Array(List)์ ๊ฐ์ฅ ํฐ ํน์ง๊ณผ ๊ทธ๋ก ์ธํด ๋ฐ์ํ๋ ์ฅ์ ๊ณผ ๋จ์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Array์ ๊ฐ์ฅ ํฐ ํน์ง์ ์์ฐจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค๋ ์ ์ ๋๋ค.
๋ฐ์ดํฐ์ ์์๊ฐ ์๊ธฐ ๋๋ฌธ์ 0๋ถํฐ ์์ํ๋ index๊ฐ ์กด์ฌํ๋ฉฐ, index๋ฅผ ์ฌ์ฉํด ํน์ ์์๋ฅผ ์ฐพ๊ณ ์กฐ์์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด Array์ ์ฅ์ ์ ๋๋ค.
์์ฐจ์ ์ผ๋ก ์กด์ฌํ๋ ๋ฐ์ดํฐ์ ์ค๊ฐ์ ์์๊ฐ ์ฝ์ ๋๊ฑฐ๋ ์ญ์ ๋๋ ๊ฒฝ์ฐ ๊ทธ ๋ค์ ๋ชจ๋ ์์๋ค์ ํ ์นธ์ฉ ๋ค๋ก ๋ฐ๊ฑฐ๋ ๋น๊ฒจ์ค์ผ ํ๋ ๋จ์ ๋ ์์ต๋๋ค.
์ด๋ฌํ ์ด์ ๋ก Array๋ ์ ๋ณด๊ฐ ์์ฃผ ์ญ์ ๋๊ฑฐ๋ ์ถ๊ฐ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ธฐ์๋ ์ ์ ์น ์์ต๋๋ค.
๐ก Array๋ฅผ ์ ์ฉ์ํค๋ฉด ์ข์ ๋ฐ์ดํฐ์ ์๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ๋ค์ด์ฃผ์ธ์. ๊ตฌ์ฒด์ ์์์ ํจ๊ป Array๋ฅผ ์ ์ฉํ๋ฉด ์ข์ ์ด์ , ๊ทธ๋ฆฌ๊ณ Array๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ด๋ป๊ฒ ๋๋์ง ํจ๊ป ์ค๋ช ํด์ฃผ์ธ์.
Array๋ฅผ ์ ์ฉ์ํค๋ฉด ์ข์ ์๋ก ์ฃผ์ ์ฐจํธ๊ฐ ์์ต๋๋ค.
์ฃผ์ ์ฐจํธ์ ๋ํ ๋ฐ์ดํฐ๋ ์์๊ฐ ์ค๊ฐ์ ์๋กญ๊ฒ ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋๋ ์ ๋ณด๊ฐ ์๋๋ฉฐ, ๋ ์ง๋ณ๋ก ์ฃผ์ ๊ฐ๊ฒฉ์ด ์ฐจ๋ก๋๋ก ์ ์ฅ๋์ด์ผ ํ๋ ๋ฐ์ดํฐ์ ๋๋ค.
์ฆ, ์์๊ฐ ๊ต์ฅํ ์ค์ํ ๋ฐ์ดํฐ์ด๋ฏ๋ก Array ๊ฐ์ด ์์๋ฅผ ๋ณด์ฅํด์ฃผ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Array๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์๊ฐ ์๋ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ ์ง๋ณ ์ฃผ์ ๊ฐ๊ฒฉ์ ํ์ธํ๊ธฐ ์ด๋ ค์ฐ๋ฉฐ ๋งค๋ฒ ์ ์ฒด ์๋ฃ๋ฅผ ์ฝ์ด ๋ค์ด๊ณ ๋น๊ตํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ๋ฐ์ํฉ๋๋ค.
๐ก Stack๊ณผ Queue, Tree์ Heap์ ๊ตฌ์กฐ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Stack๊ณผ Queue๋ ์ ํ ์๋ฃ๊ตฌ์กฐ์ ์ผ์ข ์ด๋ฉฐ, Array์ LinkedList๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
Stack์ ํ์ ์ ์ถ(LIFO)๋ฐฉ์ ์ฆ, ๋์ค์ ๋ค์ด๊ฐ ์์๊ฐ ๋จผ์ ๋์ค๋ ๊ตฌ์กฐ์ด๊ณ
Queue๋ ์ ์ ์ ์ถ(FIFO)๋ฐฉ์ ์ฆ, ๋จผ์ ๋ค์ด๊ฐ ์์๊ฐ ๋จผ์ ๋์ค๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ต๋๋ค.
Tree๋ ์คํ๊ณผ ํ์ ๊ฐ์ ์ ํ ๊ตฌ์กฐ๊ฐ ์๋ ๋น์ ํ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, ๊ณ์ธต์ ๊ด๊ณ๋ฅผ ํํํ๊ธฐ์ ์ ํฉํฉ๋๋ค.
Heap์ ์ต๋๊ฐ ๋๋ ์ต์๊ฐ์ ์ฐพ์๋ด๋ ์ฐ์ฐ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด ๊ณ ์๋ ๊ตฌ์กฐ๋ก,
๊ฐ ๋ ธ๋์ ํค๊ฐ์ด ์์์ ํค๊ฐ๋ณด๋ค ์์ง ์๊ฑฐ๋(์ต๋ํ) ๊ทธ ์์์ ํค๊ฐ๋ณด๋ค ํฌ์ง ์์(์ต์ํ) ์์ ์ด์งํธ๋ฆฌ ์ ๋๋ค.

๐ก Stack๊ณผ Queue์ ์ค์ฌ์ฉ ์๋ฅผ ๋ค์ด ๊ฐ๋จํ ์ค๋ช ํด์ฃผ์ธ์.
Stack - ์๋ฐ์ Stack ๋ฉ๋ชจ๋ฆฌ ์์ญ
์ง์ญ๋ณ์์ ๋งค๊ฐ๋ณ์ ๋ฐ์ดํฐ ๊ฐ์ด ์ ์ฅ๋๋ ๊ณต๊ฐ์ด๋ฉฐ, ๋ฉ์๋ ํธ์ถ์ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๊ณ ์ข ๋ฃ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋๋ฉฐ,
LIFO(Last In First Out)๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค.
Queue - OS์ ์ค์ผ์ฅด๋ฌ
์์์ ํ ๋น๊ณผ ํ์๋ฅผ ํ๋ ์ค์ผ์ฅด๋ฌ ์ญํ ์ ํ๊ฐ ํ ์ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋ ๋ค์์ ํ๋ก์ธ์ค ์ค ์ด๋ค ํ๋ก์ธ์ค์๊ฒ ์์์ ํ ๋นํ ๊ฒ์ธ๊ฐ ๊ทธ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์์์ ํจ์จ์ ์ธ ์ฌ์ฉ์ ์๊ณ ,
๊ฐ์ฅ ๋จ์ํ ํํ์ ์ค์ผ์ฅด๋ง ์ ์ฑ ์ด ์ ์ ์ ์ฒ๋ฆฌ(First Com First Served) ์ฆ, ํ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
๐ก Stack ํด๋์ค๋ฅผ ์์ฝ๋ฉ์ผ๋ก ๊ตฌํํด์ฃผ์ธ์.
|
public class Stack { |
|
private static int MAX_STACK_SIZE = 10; |
|
private int top; |
|
private int[] data = new int[MAX_STACK_SIZE]; |
|
|
|
public Stack() { |
|
top = -1; |
|
} |
|
|
|
public void push(int data_) throws Exception { |
|
if (isFull()) { |
|
throw new Exception("์คํ์ด ๊ฐ๋ ์ฐผ์ต๋๋ค."); |
|
} |
|
data[++top] = data_; |
|
} |
|
|
|
public int pop() throws Exception { |
|
if (isEmpty()) { |
|
throw new Exception("์คํ์ด ๋น์์ต๋๋ค."); |
|
} |
|
return data[top--]; |
|
} |
|
|
|
public int peek() throws Exception { |
|
if (isEmpty()) { |
|
throw new Exception("์คํ์ด ๋น์์ต๋๋ค."); |
|
} |
|
return data[top]; |
|
} |
|
|
|
public boolean isEmpty() { |
|
return top == -1; |
|
} |
|
|
|
public boolean isFull() { |
|
return top == MAX_STACK_SIZE - 1; |
|
} |
|
|
|
public int size() { |
|
return top + 1; |
|
} |
|
} |
๐ก Priority Queue(์ฐ์ ์์ ํ)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์ฐ์ ์์ ํ๋ ๋ค์ด๊ฐ ์์์ ์๊ด์์ด ์ฐ์ ์์๊ฐ ๋์ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ๊บผ๋ด๊ธฐ ์ํด ๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
์ฐ์ ์์ ํ ๊ตฌํ ๋ฐฉ์์๋ ๋ฐฐ์ด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ํ์ด ์๊ณ , ๊ทธ์ค ํ ๋ฐฉ์์ด worst case๋ผ๋ ์๊ฐ ๋ณต์ก๋ O(logN)์ ๋ณด์ฅํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์์ ์ด์งํธ๋ฆฌ ํํ์ ํ์ ์ด์ฉํด ๊ตฌํํฉ๋๋ค.
๐ก Array์ ArrayList์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Array๋ ํฌ๊ธฐ๊ฐ ๊ณ ์ ์ ์ด๊ณ , ArrayList๋ ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ ๋๋ค.
Array๋ ์ด๊ธฐํ ์ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋์ด ArrayList๋ณด๋ค ์๋๊ฐ ๋น ๋ฅด๊ณ ,
ArrayList๋ ๋ฐ์ดํฐ ์ถ๊ฐ ๋ฐ ์ญ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌํ ๋นํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ Array๋ณด๋ค ๋๋ฆฝ๋๋ค.
๐ก Array์ LinkedList์ ์ฅ/๋จ์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Array๋ ์ธ๋ฑ์ค(index)๋ก ํด๋น ์์(element)์ ์ ๊ทผํ ์ ์์ด ์ฐพ๊ณ ์ ํ๋ ์์์ ์ธ๋ฑ์ค ๊ฐ์ ์๊ณ ์์ผ๋ฉด O(1)์ ํด๋น ์์๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. ์ฆ, RandomAccess๊ฐ ๊ฐ๋ฅํด ์๋๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
ํ์ง๋ง ์ฝ์ ๋๋ ์ญ์ ์ ๊ณผ์ ์์ ๊ฐ ์์๋ค์ shift ํด์ค์ผ ํ๋ ๋น์ฉ์ด ์๊ฒจ ์ด ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๋ O(n)์ด ๋๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
์ด ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ๊ฐ linkedlist์ ๋๋ค. ๊ฐ๊ฐ์ ์์๋ค์ ์๊ธฐ ์์ ๋ค์์ ์ด๋ค ์์์ธ์ง๋ง์ ๊ธฐ์ตํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ๋ง ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ์ฝ์ ๊ณผ ์ญ์ ๋ฅผ O(1)๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค.
ํ์ง๋งLinkedList๋ ์ํ๋ ์์น์ ํ ๋ฒ์ ์ ๊ทผํ ์ ์๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. ์ํ๋ ์์น์ ์ฝ์ ์ ํ๊ณ ์ ํ๋ฉด ์ํ๋ ์์น๋ฅผ Search ๊ณผ์ ์ ์์ด์ ์ฒซ๋ฒ์งธ ์์๋ถํฐ ๋ค ํ์ธํด๋ด์ผ ํฉ๋๋ค.
๊ฐ๋จํ ์ ๋ฆฌํ๋ฉด,
Array๋ ๊ฒ์์ด ๋น ๋ฅด์ง๋ง, ์ฝ์ , ์ญ์ ๊ฐ ๋๋ฆฌ๋ค.
LinkedList๋ ์ฝ์ , ์ญ์ ๊ฐ ๋น ๋ฅด์ง๋ง, ๊ฒ์์ด ๋๋ฆฌ๋ค.
๐ก ํด์ ํ ์ด๋ธ(Hash Table)๊ณผ ์๊ฐ ๋ณต์ก๋์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
ํด์ ํ ์ด๋ธ์ (Key, Value)๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
๋น ๋ฅธ ๊ฒ์ ์๋๋ฅผ ์ ๊ณตํ๋ ์ด์ ๋ ๋ด๋ถ์ ์ผ๋ก ๋ฐฐ์ด(๋ฒํท)์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ฐ Key๊ฐ์ ํด์ํจ์์ ์ํด ๊ณ ์ ํ index๋ฅผ ๊ฐ์ง๊ฒ ๋์ด ๋ฐ๋ก ์ ๊ทผํ ์ ์์ผ๋ฏ๋ก ํ๊ท O(1)์ ์๊ฐ ๋ณต์ก๋๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํฉ๋๋ค. ํ์ง๋ง index๊ฐ์ด ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ Chanining์ ์ฐ๊ฒฐ๋ ๋ฆฌ์คํธ๋ค๊น์ง ๊ฒ์ํด์ผ ํ๋ฏ๋ก O(N)๊น์ง ์ฆ๊ฐํ ์ ์์ต๋๋ค.

๐ก Hash Map๊ณผ Hash Table์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๋๊ธฐํ ์ง์ ์ฌ๋ถ์ null ๊ฐ ํ์ฉ ์ฌ๋ถ์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
- ํด์ ํ
์ด๋ธ(Hash Table)
- ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ ๋ (๋๊ธฐํ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ ์ํฉ) Thread-safe ํ๋ค.
- Null ๊ฐ์ ํ์ฉํ์ง ์๋๋ค.
- ํด์ ๋งต(Hash Map)
- ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ ๋ (๋๊ธฐํ๋ฅผ ๊ณ ๋ คํ์ง ์๋ ์ํฉ) Thread-safeํ์ง ์๋๋ค.
- Null ๊ฐ์ ํ์ฉํ๋ค.
๐ก BST(Binary Search Tree)์ Binary Tree์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์ด์งํธ๋ฆฌ(Binary Tree)๋ ์์ ๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ธ ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋ ํธ๋ฆฌ์ด๊ณ ,
์ด์ง ํ์ ํธ๋ฆฌ(BST)๋ ์ด์ง ํ์๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๊ฒฐํฉํ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
์ด์ง ํ์์ ํจ์จ์ ์ธ ํ์ ๋ฅ๋ ฅ์ ์ ์งํ๋ฉด์, ๋น๋ฒํ ์๋ฃ ์ ๋ ฅ๊ณผ ์ญ์ ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
์ด์ง ํ์ ํธ๋ฆฌ๋ ์ผ์ชฝ ํธ๋ฆฌ์ ๋ชจ๋ ๊ฐ์ ๋ฐ๋์ ๋ถ๋ชจ ๋ ธ๋๋ณด๋ค ์์์ผ ํ๊ณ , ์ค๋ฅธ์ชฝ ํธ๋ฆฌ์ ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ณด๋ค ์ปค์ผ ํ๋ ํน์ง์ด ์์ต๋๋ค.
์ด์ง ํ์ ํธ๋ฆฌ์ ํ์ ์ฐ์ฐ์ ํธ๋ฆฌ์ ๋์ด์ ์ํฅ์ ๋ฐ์ ๋์ด๊ฐ h์ผ ๋ ์๊ฐ ๋ณต์ก๋๋ O(h)์ด๋ฉฐ,
ํธ๋ฆฌ์ ๊ท ํ์ด ํ์ชฝ์ผ๋ก ์น์ฐ์ณ์ง ๊ฒฝ์ฐ worst case๊ฐ ๋๊ณ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค.
์ด๋ฐ worst case๋ฅผ ๋ง๊ธฐ ์ํด ๋์จ ๊ธฐ๋ฒ์ด RBT(Red-Black Tree)์ ๋๋ค.
๐ก RBT(Red-Black Tree)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
RBT(Red-Black Tree)๋ BST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํธ๋ฆฌ ํ์ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ,
RBT๋ BST์ ์ฝ์ , ์ญ์ ์ฐ์ฐ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค.
BST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ๋น์ฐํ BST์ ํน์ง์ ๋ชจ๋ ๊ฐ์ต๋๋ค.
๋ ธ๋์ child๊ฐ ์์ ๊ฒฝ์ฐ child๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ NIL ๊ฐ์ ์ ์ฅํฉ๋๋ค. ์ด๋ฌํ NIL๋ค์ leaf node๋ก ๊ฐ์ฃผํฉ๋๋ค.
๋ชจ๋ ๋ ธ๋๋ฅผ ๋นจ๊ฐ์ ๋๋ ๊ฒ์์์ผ๋ก ์์น ํ๋ฉฐ, ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ์์ด ์ค๋ณต๋์ง ์์ต๋๋ค.

์ถ์ฒ: https://dev-coco.tistory.com/159 [์ฌ๊ธฐ๋ก์ด ๊ฐ๋ฐ์ํ:ํฐ์คํ ๋ฆฌ]
'CS > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฃ๊ตฌ์กฐ ์ ๋ฆฌ (0) | 2022.07.27 |
---|---|
<์๋ฃ๊ตฌ์กฐ> ์ฐ์ ์์ ํ (0) | 2022.04.20 |
<์๋ฃ๊ตฌ์กฐ> queue์ deque (0) | 2022.04.19 |
<์๋ฃ๊ตฌ์กฐ> stack (0) | 2022.04.19 |
<์๋ฃ๊ตฌ์กฐ> set๊ณผ multiset (0) | 2022.04.19 |