λͺ©λ‘π©π» μ»΄ν¨ν° ꡬ쑰/Algorithm (16)
π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?
β μ€ν λ§ν : κ³μ° λ₯λ ₯μ΄ μλ μΆμ κΈ°κ³μ κ·Έ κΈ°κ³λ₯Ό μ΄μ©ν΄μ ν μ μλ λ¬Έμ λ€μ μ°κ΅¬νλ μ»΄ν¨ν° κ³Όνμ λΆμΌ : μΆμ κΈ°κ³λ₯Ό μ€ν λ§ν(automata, 볡μν) λλ μ€ν λ§ν€(automaton, λ¨μν), μ¦ μλ κΈ°κ³ : μ€ν λ§νλ μ μ΄λ μ νν μνλ₯Ό κ°κ³ , μ λ ₯μ λ°μ μ λ ₯μ λ°λΌ μΌμ νκ² μνλ₯Ό μ μ΄νλ©°, μΆλ ₯μ λ΄λλλ€ : μκ³ λ¦¬μ¦μ΄ μꡬνλ κ², μ¦ κ³μ° λ¬Έμ λ₯Ό ν΄κ²°ν λ₯λ ₯κ³Ό κ°λ€
=> ν(heap) μλ£κ΅¬μ‘° κ°λ μ΄ν΄νκΈ° | κ°λ°μ μ½λ©ν μ€νΈ & λ©΄μ μ§μ 𫧠ν(heap) μλ£κ΅¬μ‘° : μ΅λκ° λ° μ΅μκ°μ μ°Ύμλ΄λ μ°μ°μ λΉ λ₯΄κ² νκΈ° μν΄ κ³ μλ μμ μ΄μ§νΈλ¦¬ (complete binary tree) λ₯Ό κΈ°λ³ΈμΌλ‘ ν μλ£κ΅¬μ‘° : Aκ° Bμ λΆλͺ¨ λ Έλμ΄λ©΄, Aμ ν€ κ°κ³Ό Bμ ν€ κ° μ¬μ΄μλ λμ κ΄κ³κ° μ±λ¦½λλ€ - μ΅λ ν : λΆλͺ¨ λ Έλμ ν€ κ°μ΄ μμ λ Έλμ ν€ κ°λ³΄λ€ νμ ν° ν κ°μ§ left : i * 2 + 1 right : i * 2 + 2 parent : (i - 1) / 2 - μ΅μ ν : λΆλͺ¨ λ Έλμ ν€ κ°μ΄ μμ λ Έλμ ν€ κ°λ³΄λ€ νμ μμ ν κ°μ§ 𫧠ν(heap) μ£Όμ λ©μλ peek() : μ΅λ/μ΅μκ° λ¦¬ν΄ size() : ν μ¬μ΄μ¦ λ¦¬ν΄ isEmpty() ..
=> μ½λ©ν μ€νΈ & κΈ°μ λ©΄μ μ μν νΈλ¦¬(tree) μλ£κ΅¬μ‘° 𫧠νΈλ¦¬(tree) μλ£κ΅¬μ‘° : λ Έλμ μ λ€ κ΄κ³κ° 1:N or N:M : λΉμ ν κ³μΈ΅μ ꡬ쑰 : νλμ tree μλ νλμ root κ° μμ : κ° node λ νλμ κ°μ²΄λ‘ ννλ¨ : node μ λ°μ΄ν°μ μμ λ Έλ μ μ₯ κ°μ§ : size λ root ν¬ν¨ λͺ¨λ node μ μ : depth λ node μμ root κΉμ§μ 거리 : heightλ λ Έλ κΉμ΄μ μ΅λκ° πΎbinary tree (μ΄μ§ νΈλ¦¬) : κ° λ Έλκ° μ΅λ λκ°μ μμ λ Έλλ₯Ό κ°μ§κ³ μλ tree : κ° λ Έλκ° 0μμ μ΅λ 2κ°μ child λ Έλ κ°λλ€ πΎ binary search tree (μ΄μ§νμνΈλ¦¬) : μΌμͺ½ μμ λ Έλ κ° < λΆλͺ¨ λ Έλ κ° : λΆλͺ¨ λ Έλ κ° < ..
=> μ΄ λ°©λ²μΌλ‘ νμ΄λ³΄μΈμ (μ¬λΌμ΄λ© μλμ° μκ³ λ¦¬μ¦) 𫧠μ¬λΌμ΄λ© μλμ° μκ³ λ¦¬μ¦ : λΆλΆ λ°°μ΄μ μμλ€μ μ΄λ ν 쑰건 νμ κ³μ°ν λ μ¬μ© : νλμ νΉμ λ²μλ₯Ό μ ν΄ λκ³ , κ·Έ μλμ°λ₯Ό μ΄λμν€λ©΄μ λ²μ λ΄μ μλ μμλ€μ κ³μ°ν΄μ€ : μλμ° λ²μ λ΄μ λͺ¨λ μ«μλ€μ ν©μ°νκ³ , λ²μ λ°μΌλ‘ λ²μ΄λ μ«μλ€μ λΉΌμ€λ€ πΎ μ¬μ΄μ¦κ° kμΈ, λΆλΆ λ°°μ΄(subarrary) μ μ΅λ ν© κ΅¬νκΈ° function maxSumOfSubArrary(arr: number[], k:numnber) { let windowSum = 0; let maxSum = -Infinity; for (let i = 0; i = k - 1) { ma..
=> κ°λ°μ νμ μκ³ λ¦¬μ¦ #3. μ΄μ§νμ μ½κ³ κ°λ¨νκ² π«§ μ΄μ§νμ : λΆν μ 볡 ν¨ν΄μ μ§ν₯νλ νμ μκ³ λ¦¬μ¦ : μΈν λ°°μ΄/λ°μ΄ν°κ° μ λ ¬λμ΄ μλ 쑰건νμ μ μ©λ¨ 𫧠μ΄μ§νμ vs μ ννμ μ΄μ§νμ μ ννμ worst : O(log n) 맀ν μλ£λ₯Ό λ°μΌλ‘ λλ κ°λ©° νμ (μ νλ³΄λ€ λΉ λ¦) worst : O(n) μμ°¨μ μΈ νμ ν¨ν΄ μΈν λ°μ΄ν° μ λ ¬ λΆν μ 볡 μ ν μκ±°λ μ€κ° μ¬μ΄μ¦μ λ°μ΄ν°μ μ μ μ 𫧠μ΄μ§νμ μ리 1) L, M, (μ€κ° μ§μ ), R ν¬μΈνΈ μ€λΉ 2) λ°°μ΄μ M μκ° μ°Ύλ μ«μμ κ°λ€λ©΄ M λ¦¬ν΄ μΆμΈ‘ μ«μκ° μ°Ύλ μ«μλ³΄λ€ μλ€λ©΄ Lμ M + 1 μμΉλ‘ μ΄λ (μ’μΈ‘ μ«μλ€ νμμμ μ μΈ) μΆμΈ‘ μ«μκ° μ°Ύλ μ«μλ³΄λ€ ν¬λ€λ©΄ Rμ M - 1 μμΉλ‘ μ΄λ (μ°μΈ‘ μ«μλ€ νμμμ μ μΈ) ..
=> κ°λ°μ νμ μκ³ λ¦¬μ¦ #2. μ ννμ μκ³ λ¦¬μ¦μ΄λ? 𫧠μ ννμ : λ°°μ΄/리μ€νΈμμ μ£Όμ΄μ§ μμλ₯Ό μ°Ύμ λ μ¬μ©λ¨ : μΌλ ¬λ‘ λ μλ£λ₯Ό μ°¨λ‘λλ‘ νμ : μ°Ύκ³ μνλ μμλ₯Ό μ°Ύμ λ κΉμ§ or λͺ¨λ μμμ μνκ° λλ λ κΉμ§ μ§ 1) λ°°μ΄ μ 체 μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ μμ°¨μ μν 2) κ° λ¨κ³λ§λ€ μ°Ύλ μμκ° μλμ§ νμΈ, λ§μ½ μ°Ύκ² λλ€λ©΄ μν λ©μΆκΈ° 3) λͺ» μ°Ύμ κ²½μ°, λ€μ μμλ‘ λμ΄κ°λ©° λ°λ³΅ν¨ const nums = [10, 5, 2, 20, 7, 12, 33, 52] function linearSearch(arr: number[], val:number): boolean { for (let index = 0; index < arr.length; index ++) { const element =..
=> κ°λ°μ νμ μκ³ λ¦¬μ¦ #1. μ¬κ· μ¬μ© λ°©λ² (Recursion) 𫧠μ¬κ· μ¬μ© λ°©λ² (Recursion) : μκΈ° μμ μ νΈμΆνλ ν¨μ πΎ 10μμ countDown νκΈ° : μν ν λλ§λ€ -1 νκΈ° : 0λ³΄λ€ μμΌλ©΄ μ€μ§νκΈ° function cntDown(n: number): void { // 1. Base case (stop contidtion) if (n = 1; i--) { n = n * i; } return n; } // μ¬κ·ν¨μ function factorial(n: number): number { // 1. Base case (stop contidtion) if (n === 0 || n ===1) { return 1; } // 2. Resursive case return n * fa..
=> μ½λ©ν μ€νΈ νμ ν ν¬λ, ν¬ ν¬μΈν° κΈ°λ² π«§ ν¬ ν¬μΈν° ν ν¬λ : 1μ°¨μ λ°°μ΄μμ κ°μ λ€λ₯Έ μμλ₯Ό κ°λ¦¬ν€λ 2κ°μ ν¬μΈν°λ₯Ό μ¬μ©νμ¬ λͺ©νκ° κ΅¬νλ€ : μμ νμ O(n) μ루μ -> O(n) μΌλ‘ μ±λ₯ ν₯μ κ°λ₯ : μ°μλ ꡬκ°μ μμλ€μ μ²λ¦¬νκΈ° μνκ±°λ, μ λ ¬λ λ°°μ΄μμ 무μΈκ°λ₯Ό ꡬν λ ν¬ν¬μΈν° μ¬μ© πΎ λ°°μ΄μμ, μμλ€μ ν©μ΄ xμΈ μ°μ λΆλΆ λ°°μ΄μ κ°μλ₯Ό ꡬνλΌ arr = [1, 3, 6, 5, 2, 7, 9], x = 9 result : {3, 6}, {2, 7}, {9} // μμ νμ O(n^2) function cntSubArrSumOfX(arr, x) { let cnt = 0; for (let i = 0; i < arr.length; i ++) { let sum = 0; for ..