π COMPUTER SCIENCE
μλ£κ΅¬μ‘°(Data Structure) μ΄μ 리
chamroro
2025. 2. 24. 19:33
λνμ μλ£κ΅¬μ‘° λ° μκ³ λ¦¬μ¦ μ 리
μ΅κ·Όμ μλ£κ΅¬μ‘° λΆλ₯ λμ, λ°°μ΄(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): μ λ ¬ μκ³ λ¦¬μ¦μ ν λ°©λ²
λ°μν