μκ³ λ¦¬μ¦ κ³΅λΆ
μκ³ λ¦¬μ¦
μκ° λ³΅μ‘λ: νΉμ ν ν¬κΈ°μ μ
λ ₯μ λνμ¬ μκ³ λ¦¬μ¦μ μν μκ° λΆμ
κ³΅κ° λ³΅μ‘λ: νΉμ ν ν¬κΈ°μ μ
λ ₯μ λνμ¬ μκ³ λ¦¬μ¦μ λ©λͺ¨λ¦¬ μ¬μ©λ λΆμ
λΉ
μ€ νκΈ°λ²(Big-O Notation): 볡μ‘λλ₯Ό λνλ΄κΈ° μν νκΈ° λ°©λ²
κ°μ₯ λΉ λ₯΄κ² μ¦κ°νλ νλ§ κ³ λ €νλ€.- ex. 3N^3 + 5N^2 + 1,000,000 μΌ λ, λΉ μ€ νκΈ°λ²μμλ μ°¨μκ° κ°μ₯ ν° O(N^3)μΌλ‘ νν
Dynamic Programming
λ©λͺ¨μ΄μ μ΄μ (Memoization)
λ©λͺ¨μ΄μ μ΄μ μ νλ€μ΄ λ°©μμμ μ¬μ©λ©λλ€. ν λ² κ³μ°λ κ²°κ³Όλ₯Ό λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯νλ κΈ°λ²μ λλ€.
- κ°μ λ¬Έμ λ₯Ό λ€μ νΈμΆνλ©΄ λ©λͺ¨νλ κ²°κ³Όλ₯Ό κ·Έλλ‘ κ°μ Έμ΅λλ€.
- κ°μ κΈ°λ‘ν΄ λλλ€λ μ μμ μΊμ±(Caching) μ΄λΌκ³ λ ν©λλ€.
νλ€μ΄ VS 보ν μ
- νλ€μ΄(λ©λͺ¨μ΄μ μ΄μ ) λ°©μμ νν₯μμ΄λΌκ³ λ νλ©° 보ν°μ λ°©μμ μν₯μμ΄λΌκ³ λ ν©λλ€.
- λ€μ΄λλ―Ή νλ‘κ·Έλλ°μ μ νμ μΈ ννλ 보ν
μ
λ°©μμ
λλ€.
- κ²°κ³Ό μ μ₯μ© λ¦¬μ€νΈλ DP ν μ΄λΈμ΄λΌκ³ λΆλ¦ λλ€.
- μλ°ν λ§νλ©΄ λ©λͺ¨μ΄μ μ΄μ
μ μ΄μ μ κ³μ°λ κ²°κ³Όλ₯Ό μΌμμ μΌλ‘ κΈ°λ‘ν΄ λλ λμ κ°λ
μ μλ―Έν©λλ€.
- λ°λΌμ λ©λͺ¨μ΄μ μ΄μ μ λ€μ΄λλ―Ή νλ‘κ·Έλλ°μ κ΅νλ κ°λ μ μλλλ€.
- ν λ² κ³μ°λ κ²°κ³Όλ₯Ό λ΄μ λκΈ°λ§ νκ³ λ€μ΄λλ―Ή νλ‘κ·Έλλ°μ μν΄ νμ©νμ§ μμ μλ μμ΅λλ€.
λ€μ΄λλ―Ή νλ‘κ·Έλλ° VS λΆν μ 볡
- λ€μ΄λλ―Ή νλ‘κ·Έλλ°κ³Ό λΆν μ 볡μ λͺ¨λ μ΅μ λΆλΆ ꡬ쑰λ₯Ό κ°μ§ λ μ¬μ©ν μ μμ΅λλ€.
- ν° λ¬Έμ λ₯Ό μμ λ¬Έμ λ‘ λλ μ μμΌλ©° μμ λ¬Έμ μ λ΅μ λͺ¨μμ ν° λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ μν©
- λ€μ΄λλ―Ή νλ‘κ·Έλλ°κ³Ό λΆν μ 볡μ μ°¨μ΄μ μ λΆλΆ λ¬Έμ μ μ€λ³΅μ
λλ€.
- λ€μ΄λλ―Ή νλ‘κ·Έλλ° λ¬Έμ μμλ κ° λΆλΆ λ¬Έμ λ€μ΄ μλ‘ μν₯μ λ―ΈμΉλ©° λΆλΆ λ¬Έμ κ° μ€λ³΅λ©λλ€.
- λΆν μ 볡 λ¬Έμ μμλ λμΌν λΆλΆ λ¬Έμ κ° λ°λ³΅μ μΌλ‘ κ³μ°λμ§ μμ΅λλ€.
- λΆν μ 볡μ λνμ μΈ μμμΈ ν΅ μ λ ¬μ μ΄ν΄λ΄
μλ€.
- νλ² κΈ°μ€ μμ(Pivot)κ° μ리λ₯Ό λ³κ²½ν΄μ μ리λ₯Ό μ‘μΌλ©΄ κ·Έ κΈ°μ€ μμμ μμΉλ λ°λμ§ μμ΅λλ€.
- λΆν μ΄νμ ν΄λΉ νΌλ²μ λ€μ μ²λ¦¬νλ λΆλΆ λ¬Έμ λ νΈμΆνμ§ μμ΅λλ€.
- λΆν μ 볡μ λνμ μΈ μμμΈ ν΅ μ λ ¬μ μ΄ν΄λ΄
μλ€.
λ€μ΄λλ―Ή νλ‘κ·Έλλ° λ¬Έμ μ μ κ·Όνλ λ°©λ²
- μ£Όμ΄μ§ λ¬Έμ κ° λ€μ΄λλ―Ή νλ‘κ·Έλλ° μ νμμ νμ νλ κ²μ΄ μ€μν©λλ€.
- κ°μ₯ λ¨Όμ 그리λ, ꡬν, μμ νμ λ±μ μμ΄λμ΄λ‘ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλμ§ κ²ν ν μ μμ΅λλ€.
- λ€λ₯Έ μκ³ λ¦¬μ¦μΌλ‘ νμ΄ λ°©λ²μ΄ λ μ€λ₯΄μ§ μλ€λ©΄ λ€μ΄λλ―Ή νλ‘κ·Έλλ°μ κ³ λ €ν΄ λ΄ μλ€.
- μΌλ¨ μ¬κ· ν¨μλ‘ λΉν¨μ¨μ μΈ μμ νμ νλ‘κ·Έλ¨μ μμ±ν λ€μ (νλ€μ΄) μμ λ¬Έμ μμ ꡬν λ΅μ΄ ν° λ¬Έμ μμ κ·Έλλ‘ μ¬μ©λ μ μμΌλ©΄, μ½λλ₯Ό κ°μ νλ λ°©λ²μ μ¬μ©ν μ μμ΅λλ€.
- μΌλ°μ μΈ μ½λ© ν μ€νΈ μμ€μμλ κΈ°λ³Έ μ νμ λ€μ΄λλ―Ή νλ‘κ·Έλλ° λ¬Έμ κ° μΆμ λλ κ²½μ°κ° λ§μ΅λλ€.
μμ νμ (Exhaustive Search)
- λͺ¨λ κ²½μ°μ μλ₯Ό μλν΄λ³΄λ λ°©λ²
- μλμ μΌλ‘ ꡬνμ΄ κ°λ¨ν ν΄κ° μ‘΄μ¬νλ€λ©΄ νμ μ°Ύκ² λ¨
- κ²½μ°μ μμ λ°λΌ μ€ν μκ°μ΄ λΉλ‘νκΈ° λλ¬Έμ μ λ ₯ κ°μ λ²μκ° μμ κ²½μ°μ μ μ©
DFS & BFS
- λνμ μΈ κ·Έλν νμ μκ³ λ¦¬μ¦
- νμ(Search)μ΄λ λ§μ μμ λ°μ΄ν° μ€ μνλ λ°μ΄ν°λ₯Ό μ°Ύλ κ³Όμ μ λ§ν¨
DFS (Depth-First-Search)
- κΉμ΄ μ°μ νμ, κ·Έλνμμ κ°μ₯ κΉμ λΆλΆμ μ°μ μ μΌλ‘ νμ
- DFSλ μ€ν μλ£κ΅¬μ‘° (νΉμ μ¬κ·ν¨μ)λ₯Ό μ΄μ©
BFS (Breadth-First-Search)
- λλΉ μ°μ νμ, κ·Έλνμμ κ°μ₯ κ°κΉμ΄ λ ΈλλΆν° νμ
- BFSλ ν μλ£κ΅¬μ‘° μ¬μ© (ex. μ΅λ¨κ±°λ¦¬ λ¬Έμ μμ μμ£Ό μ¬μ©)
μ€ν μλ£κ΅¬μ‘°
- λ¨Όμ λ€μ΄μ¨ λ°μ΄ν°κ° λμ€μ λκ°λ νμ(μ μ νμΆ LIFO)
- μ ꡬμ μΆκ΅¬κ° λμΌ
ν μλ£κ΅¬μ‘°
- λ¨Όμ λ€μ΄μ¨ λ°μ΄ν°κ° λ¨Όμ λκ°λ νμ(μ μ μ μΆ FIFO)
- μ ꡬμ μΆκ΅¬κ° λͺ¨λ λ«λ € μλ ν°λκ³Ό κ°μ νν
μ ν΄λ¦¬λ νΈμ λ²
- λκ°μ μ΅λ 곡μ½μλ₯Ό ꡬνλ λνμ μΈ μκ³ λ¦¬μ¦
- λ μμ°μ A, Bμ λνμ¬ (A > B) Aλ₯Ό Bλ‘ λλ λλ¨Έμ§λ₯Ό Rμ΄λΌκ³ ν©μλ€.
- μ΄λ Aμ Bμ μ΅λ곡μ½μλ Bμ Rμ μ΅λ곡μ½μμ κ°μ΅λλ€.
μ λ ¬
- μ λ ¬(Sorting)μ΄λ λ°μ΄ν°λ₯Ό νΉμ ν κΈ°μ€μ λ°λΌ μμλλ‘ λμ΄νλ κ²
- λ¬Έμ μν©μ λ°λΌ μ μ ν μ λ ¬ μκ³ λ¦¬μ¦μ΄ 곡μμ²λΌ μ¬μ©λ¨
μ ν μ λ ¬
- μ²λ¦¬λμ§ μμ λ°μ΄ν° μ€ κ°μ₯ μμ λ°μ΄ν°λ₯Ό μ νν΄ λ§¨ μμ μλ λ°μ΄ν°μ λ°κΎΈλ κ²μ λ°λ³΅
- μκ° λ³΅μ‘λ: O(N^2)
μ½μ μ λ ¬
- μ²λ¦¬λμ§ μμ λ°μ΄ν°λ₯Ό νλμ© κ³¨λΌ μ μ ν μμΉμ μ½μ
- μ ν μ λ ¬μ λΉν΄ ꡬννκΈ° μ΄λ ΅μ§λ§ μΌλ°μ μΌλ‘ λ³΄λ€ ν¨μ¨μ
μμ°¨νμ (Sequential Search)
μμ°¨νμμ μ΄λ ν κ°μ μ°Ύκ³ μ ν λ νλμ© λΉκ΅ν΄λ³΄λ λ°©λ²μ λ§ν©λλ€.
μ΄μ§νμ
μ΄μ§νμμ λ²μμ μ€κ° κ°μ μ°Ύμ μ°ΎμΌλ €λ κ°κ³Ό λΉκ΅νμ¬ λ²μλ₯Ό μ’νλκ°λ λ°©λ²μ λ§ν©λλ€.
μ΄μ§νμμ κ²½μ° μ λ ¬μ΄ μ λμ΄μλ κ²½μ° μ¬μ©ν μ μμ΅λλ€.
νμλ²
그리λ μκ³ λ¦¬μ¦μ΄λ νμ¬ μν©μμ κ°μ₯ μ’μ μ΅μ μ μ νμ κ³ λ₯΄λ μκ³ λ¦¬μ¦μ λ§ν©λλ€. 그리λ μκ³ λ¦¬μ¦μ κ°λ¨ν λ¬Έμ ν΄κ²°μ λ€μ΄λλ―Ή νλ‘κ·Έλλ°μ μ¬μ©νλ©΄ μ§λμΉκ² λ§μ μΌμ νλ€λ κ²μμ κ³ μλ μκ³ λ¦¬μ¦μ λλ€. λ°λΌμ 그리λ μκ³ λ¦¬μ¦μ μ΅μ ν΄λ₯Ό 보μ₯νμ§λ μμ΅λλ€.
ꡬν
ꡬνμ΄λ λ¨Έλ¦Ώμμ μλ μκ³ λ¦¬μ¦μ μμ€μ½λλ‘ λ°κΎΈλ κ³Όμ μ λλ€.
- μκ³ λ¦¬μ¦μ κ°λ¨νλ° μ½λκ° κΈΈμ΄μ§λ λ¬Έμ
- μ€μ μ°μ°μ λ€λ£¨κ³ νΉμ μμμ κΉμ§ μΆλ ₯ν΄μΌνλ λ¬Έμ
- λ¬Έμμ΄μ νΉμ ν κΈ°μ€μ λ°λΌ λμ΄ μ²λ¦¬ν΄μΌνλ λ¬Έμ
- μ μ ν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ°Ύμ μ¬μ©ν΄μΌνλ λ¬Έμ
ν΄μ (Hash)
- μμμ ν¬κΈ°λ₯Ό κ°μ§ λ°μ΄ν°(Key)λ₯Ό κ³ μ λ ν¬κΈ°μ λ°μ΄ν°(Value)λ‘ λ³νμμΌ μ μ₯νλ κ²
- ν€μ λν ν΄μ κ°μ μ¬μ©νμ¬ κ°μ μ μ₯νκ³ ν€-κ° μμ κ°―μμ λ°λΌ λμ μΌλ‘ ν¬κΈ°κ° μ¦κ°νλ μ°κ΄ λ°°μ΄
- ν€μ λν ν΄μ κ°μ ꡬνλ κ³Όμ μ ν΄μ±(Hashing)μ΄λΌκ³ νλ©° μ΄λ μ¬μ©νλ ν¨μ(μκ³ λ¦¬μ¦) ν΄μ ν¨μ(Hash Function)μ΄λΌκ³ νλ€.
- ν΄μ κ° μ체λ₯Ό indexλ‘ μ¬μ©νκΈ° λλ¬Έμ νκ· μκ° λ³΅μ‘λκ° O(1)λ‘ λ§€μ° λΉ λ¦
μ°κ΄ λ°°μ΄?
μ°κ΄ λ°°μ΄(associative array)μ μλ£κ΅¬μ‘°μ νλλ‘, ν€ νλμ κ° νλκ° μ°κ΄λμ΄ μμΌλ©° ν€λ₯Ό ν΅ν΄ μ°κ΄λλ κ°μ μ»μ μ μλ€.
ν΄μ ν¨μ (Hash Function)
- μμμ κΈΈμ΄μ λ°μ΄ν°λ₯Ό μ λ ₯λ°μ μΌμ ν κΈΈμ΄μ λΉνΈμ΄λ‘ λ°νμμΌμ£Όλ ν¨μ
- μλμ κ°μ΄λ ν€λ₯Ό μμΈνλλ° μ¬μ©λλ©°, κ·Έ κ°μ΄ κ΄λ ¨λ λ°μ΄ν°κ° κ²μλ λλ§λ€ λ€μ μ¬μ©λλ€.
- λ°μ΄ν°μ ν¨μ¨μ κ΄λ¦¬λ₯Ό λͺ©μ μΌλ‘ μμμ κΈΈμ΄μ λ°μ΄ν°λ₯Ό κ³ μ λ κΈΈμ΄μ λ°μ΄ν°λ‘ λ§€ννλ ν¨μ
- κ³μ°μ΄ 볡μ‘νμ§ μκ³ μ€λ³΅ ν€ κ° μμ΄ ν΄μκ°μ κ³ λ₯΄κ² λ§λλ ν¨μκ° μ’λ€. (μΆ©λμ΄ μΌμ΄λμ§ μμμλ‘)
- λ¬Έμμ΄(string)μ λ°μμ μ«μλ₯Ό λ°ννλ ν¨μ (ν¨μλ λ¬Έμμ΄μ λν΄ μ«μλ₯Ό λ§€ν)
ν΄μ± (Hashing)
- ν€ κ°μ μ°μ μ°μ°μ μ μ©νμ¬ μ μ₯λμ΄ μλ ν μ΄λΈμ μ£Όμλ₯Ό κ³μ°νμ¬ νλͺ©μ μ κ·Ό
- λ§€ννλ κ³Όμ μ λ§νλ€.
- ν€(key): λ§€ν μ μλ λ°μ΄ν° κ°
- ν΄μκ°: λ§€ν ν λ°μ΄ν°
μ₯μ
- ν΄μ μΆ©λμ΄ λ°μν κ°λ₯μ±μ΄ μμ§λ§, μ μ 리μμ€λ‘ λ§μ λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μμ
- indexμ ν΄μ κ°μ μ¬μ©νλ―λ‘ λͺ¨λ λ°μ΄ν°λ₯Ό μ΄νΌμ§ μμλ κ²μκ³Ό μ½μ /μμ λ₯Ό λΉ λ₯΄κ² μν
- ν΄μ ν¨μλ μΈμ λ λμΌν ν΄μ κ°μ 리ν΄νκ³ indexλ§ μλ©΄ ν΄μ ν μ΄λΈμ ν¬κΈ°μ μκ΄μμ΄ λ°μ΄ν°μ λΉ λ₯΄κ² μ κ·Ό κ°λ₯
- λ°μ΄ν° μμΈμ€(μ½μ , μμ , νμ)μ μκ° λ³΅μ‘λ O(1)μ μ§ν₯νλ€.