์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- JPA
- ์ค์ผ๋ฌํ๋ก์ ํธ
- gcp
- ์ฝ๋์
- ํ๋ก๊ทธ๋๋ฐ๋ฌธ์
- ๋จธ์ ๋ฌ๋
- ์นดํ์นด
- ์คํ๋ง๋ถํธ
- ์คํ๋ง
- ๋ฐฑ์ค
- VPC
- ์คํ๋ง ๋ถํธ
- ๋ก๋๋ฐธ๋ฐ์
- ์ฟ ๋ฒ๋คํฐ์ค
- ์๋ฏธ๋
- Spring Boot
- aws
- Apache Kafka
- ํด๋ผ์ฐ๋
- ํด๋ผ์ฐ๋ ์ปดํจํ
- ์๋ฃ๊ตฌ์กฐ
- ๋ฐฑํธ๋ํน
- ์๊ณ ๋ฆฌ์ฆ
- Spring
- DFS
- Docker
- Elasticsearch
- Kafka
- Spring Data JPA
- springboot
- Today
- Total
GW LABS
๐ ์๋ฃ๊ตฌ์กฐ ์นํธ์ํธ: ์๊ฐ๋ณต์ก๋์ ๊ณต๊ฐ๋ณต์ก๋ ์๋ฒฝ ์ ๋ฆฌ ๋ณธ๋ฌธ
๐ ์๋ฃ๊ตฌ์กฐ ์นํธ์ํธ: ์๊ฐ๋ณต์ก๋์ ๊ณต๊ฐ๋ณต์ก๋ ์๋ฒฝ ์ ๋ฆฌ
GeonWoo Kim 2025. 8. 10. 15:30๐ ์๋ฃ๊ตฌ์กฐ ์นํธ์ํธ: ์๊ฐ๋ณต์ก๋์ ๊ณต๊ฐ๋ณต์ก๋ ์๋ฒฝ ์ ๋ฆฌ
์๋ก
์๋ฃ๊ตฌ์กฐ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ์ข์ฐํ๋ ํต์ฌ ์์์
๋๋ค. ๊ฐ์ ๋ฌธ์ ๋ผ๋ ์ด๋ค ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ํํ๋๋์ ๋ฐ๋ผ ์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ๋ณต์ก๋๊ฐ ํฌ๊ฒ ๋ฌ๋ผ์ง๋๋ค.
์ด๋ฒ ๊ธ์์๋ ๋ฐฐ์ด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ํด์ ํ
์ด๋ธ, ์คํ, ํ, ๋ฐํฌ, ํธ๋ฆฌ, ์ด์ง ํธ๋ฆฌ, ํ, ๊ทธ๋ํ๋ฅผ ์ค์ฌ์ผ๋ก, ๊ฐ ์๋ฃ๊ตฌ์กฐ์ ํน์ฑ๊ณผ ์๊ฐ·๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ํ๋์ ๋ณผ ์ ์๋ ์นํธ์ํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด ๊ธ์ ์ฝ๊ณ ๋๋ฉด ์ฝ๋ฉ ํ
์คํธ๋ฟ ์๋๋ผ ์ค๋ฌด ํ๋ก์ ํธ์์๋ ์ต์ ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ํํ ์ ์๋ ๊ธฐ์ค์ ๊ฐ์ถ๊ฒ ๋ ๊ฒ์
๋๋ค.
๋ณธ๋ก
1. ์ฃผ์ ์๋ฃ๊ตฌ์กฐ ๊ฐ์ ๋ฐ ์๊ฐ·๊ณต๊ฐ ๋ณต์ก๋
๋ค์ ํ๋ ๊ฐ ์๋ฃ๊ตฌ์กฐ์ ํ๊ท ์ ์ธ ์ฐ์ฐ ๋ณต์ก๋๋ฅผ ์์ฝํ ๊ฒ์ ๋๋ค.
์๋ฃ๊ตฌ์กฐ | ์ ๊ทผ(Access) | ๊ฒ์(Search) | ์ฝ์ (Insert) | ์ญ์ (Delete) | ๊ณต๊ฐ๋ณต์ก๋ |
---|---|---|---|---|---|
๋ฐฐ์ด(Array) | O(1) | O(n) | O(n) | O(n) | O(n) |
์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List) | O(n) | O(n) | O(1) (head/tail ๊ธฐ์ค) | O(1) (head/tail ๊ธฐ์ค) | O(n) |
ํด์ ํ ์ด๋ธ(Hash Table) | N/A | O(1) (ํ๊ท ) / O(n) (์ต์ ) | O(1) / O(n) | O(1) / O(n) | O(n) |
์คํ(Stack) | O(n) | O(n) | O(1) | O(1) | O(n) |
ํ(Queue) | O(n) | O(n) | O(1) | O(1) | O(n) |
๋ฐํฌ(Deque) | O(n) | O(n) | O(1) | O(1) | O(n) |
ํธ๋ฆฌ(Tree) | O(log n) | O(log n) | O(log n) | O(log n) | O(n) |
์ด์ง ํ์ ํธ๋ฆฌ(BST, Balanced) | O(log n) | O(log n) | O(log n) | O(log n) | O(n) |
ํ(Heap) | O(n) | O(n) | O(log n) | O(log n) | O(n) |
๊ทธ๋ํ(Graph) | O(1)~O(n) | O(1)~O(n) | O(1)~O(n) | O(1)~O(n) | O(V+E) |
2. ์๋ฃ๊ตฌ์กฐ๋ณ ํน์ง๊ณผ ์์ ์ฝ๋
๐ ๋ฐฐ์ด (Array)
- ํน์ง: ์ธ๋ฑ์ค๋ฅผ ํตํ ๋น ๋ฅธ ์ ๊ทผ ๊ฐ๋ฅ, ํฌ๊ธฐ ๊ณ ์ (์ธ์ด์ ๋ฐ๋ผ ๋์ ๋ฐฐ์ด ์ง์).
- ์ฌ์ฉ ์์: ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ๊ณ ์ ์ ์ด๊ณ ๋น ๋ฅธ ๋๋ค ์ ๊ทผ์ด ํ์ํ ๊ฒฝ์ฐ.
# ํ์ด์ฌ ๋ฐฐ์ด(๋ฆฌ์คํธ) ์์
arr = [1, 2, 3]
arr.append(4) # O(1) ํ๊ท
arr.insert(1, 5) # O(n)
print(arr[2]) # O(1)
๐ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Linked List)
- ํน์ง: ๋ ธ๋ ๊ธฐ๋ฐ์ผ๋ก ๋์ ํฌ๊ธฐ ์กฐ์ ๊ฐ๋ฅ, ์ฝ์ /์ญ์ O(1) (์์น ์๊ณ ์์ ๊ฒฝ์ฐ), ๋๋ค ์ ๊ทผ ๋ถ๊ฐ.
- ์ฌ์ฉ ์์: ์ฝ์ /์ญ์ ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ.
// Java LinkedList ์์
import java.util.LinkedList;
LinkedList<Integer> list = new LinkedList<>();
list.addFirst(1); // O(1)
list.addLast(2); // O(1)
list.removeFirst(); // O(1)
๐ ํด์ ํ ์ด๋ธ (Hash Table)
- ํน์ง: ํ๊ท ์ ์ผ๋ก O(1) ๊ฒ์·์ฝ์ ·์ญ์ , ํด์ ์ถฉ๋ ์ ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ.
- ์ฌ์ฉ ์์: ํค-๊ฐ ๋งคํ ํ์ ์.
// JavaScript Map ์์
const map = new Map();
map.set('apple', 3); // O(1)
console.log(map.get('apple')); // O(1)
๐ ์คํ (Stack)
- ํน์ง: LIFO ๊ตฌ์กฐ, ํจ์ ํธ์ถ ์คํ, Undo ๊ธฐ๋ฅ ๊ตฌํ ๋ฑ์ ํ์ฉ.
- ์ฌ์ฉ ์์: DFS, ๊ดํธ ์ ํจ์ฑ ๊ฒ์ฌ.
stack = []
stack.append(1) # push O(1)
stack.append(2)
print(stack.pop()) # pop O(1)
๐ ํ (Queue)
- ํน์ง: FIFO ๊ตฌ์กฐ, ์์ฐจ ์ฒ๋ฆฌ ์์ ์ ํ์ฉ.
- ์ฌ์ฉ ์์: BFS, ๋๊ธฐ์ด ์์คํ .
from collections import deque
queue = deque()
queue.append(1) # enqueue O(1)
queue.append(2)
print(queue.popleft()) # dequeue O(1)
๐ ๋ฐํฌ (Deque)
- ํน์ง: ์์ชฝ ๋์์ ์ฝ์ /์ญ์ ๊ฐ๋ฅ.
- ์ฌ์ฉ ์์: ์ฌ๋ผ์ด๋ฉ ์๋์ฐ, ์๋ฐฉํฅ ํ์.
dq = deque()
dq.appendleft(1) # O(1)
dq.append(2) # O(1)
dq.pop() # O(1)
๐ ํธ๋ฆฌ (Tree) & ์ด์ง ํ์ ํธ๋ฆฌ (BST)
- ํน์ง: ๊ณ์ธต์ ๋ฐ์ดํฐ ๊ตฌ์กฐ, ์ด์ง ํ์ ํธ๋ฆฌ๋ ์ ๋ ฌ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ์ ๋ฆฌ.
- ์ฌ์ฉ ์์: DB ์ธ๋ฑ์ค, ๊ณ์ธต์ ๊ตฌ์กฐ ํํ.
// ๊ฐ๋จํ BST ์ฝ์
์์
class Node {
int value;
Node left, right;
Node(int value) { this.value = value; }
}
Node insert(Node root, int value) {
if (root == null) return new Node(value);
if (value < root.value) root.left = insert(root.left, value);
else root.right = insert(root.right, value);
return root;
}
๐ ํ (Heap)
- ํน์ง: ์ต๋๊ฐ ๋๋ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ๊บผ๋ผ ์ ์๋ ์๋ฃ๊ตฌ์กฐ.
- ์ฌ์ฉ ์์: ์ฐ์ ์์ ํ ๊ตฌํ.
import heapq
heap = []
heapq.heappush(heap, 3)
heapq.heappush(heap, 1)
print(heapq.heappop(heap)) # 1
๐ ๊ทธ๋ํ (Graph)
- ํน์ง: ์ ์ (Vertex)๊ณผ ๊ฐ์ (Edge)์ผ๋ก ๊ตฌ์ฑ, ๋คํธ์ํฌ ๋ฐ ๊ฒฝ๋ก ํ์์ ์ฌ์ฉ.
- ์ฌ์ฉ ์์: SNS ๊ด๊ณ, ๊ฒฝ๋ก ํ์ ์๊ณ ๋ฆฌ์ฆ.
graph = {
'A': ['B', 'C'],
'B': ['A', 'D'],
'C': ['A'],
'D': ['B']
}
๊ฒฐ๋ก
์ด ๊ธ์์๋ ์๋ฃ๊ตฌ์กฐ์ ํต์ฌ ๊ฐ๋
๊ณผ ์๊ฐ·๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ํ๋์ ๋ณผ ์ ์๋๋ก ์ ๋ฆฌํ์ต๋๋ค.
์๋ฃ๊ตฌ์กฐ ์ ํ์ ์ฑ๋ฅ ์ต์ ํ์ ์ฒซ๊ฑธ์์ด๋ฉฐ, ์ด๋ฅผ ์ ํํ ์ดํดํ๋ฉด ๋ฌธ์ ํด๊ฒฐ ๋ฅ๋ ฅ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
๐ก ๋น์ ์ด ์ฌ๋ฐ๋ฅธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ ์๊ฐ, ์ฑ๋ฅ ์ต์ ํ์ ์ ๋ฐ์ ์ด๋ฏธ ๋๋ ๊ฒ์ ๋๋ค.
'Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ (2) - ๋๊ธฐํ ์ด๋ก (0) | 2021.05.15 |
---|---|
๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ (1) - ์ค๋ ๋ ์ฌ์ฉ๋ฒ (0) | 2021.03.05 |