- μ΄ μ±ν°μμλ “μ¬κ·μ μΌλ‘ μμ±νλ” λ²μ μ½κ² μ΅ν μ μλ λͺ κ°μ§ λΉλ²μ λ°°μ°κ² λλ€.
- 11μ₯μμλ μ¬κ·μ ν¨μ¨μ±μ λ Όνμ§ μλλ€.
- μ¬μ€ μ¬κ·λ μκ³ λ¦¬μ¦μ μκ° λ³΅μ‘λμ λͺΉμ λΆμ μ μΈ μν₯μ λ―ΈμΉλ€.
1. μ¬κ· μΉ΄ν κ³ λ¦¬: λ°λ³΅ μ€ν
- κ°μ₯ μ¬μ΄ μΉ΄ν κ³ λ¦¬λ‘, λ°λ³΅μ μΌλ‘ ν μμ μ μ€ννλ μκ³ λ¦¬μ¦μ΄λ€.
- 10μ₯μμ μ κΉ νμ΄λ³Έ λλ ν 리 μΆλ ₯ μκ³ λ¦¬μ¦ μμ λ°λ³΅ μ€ν μΉ΄ν κ³ λ¦¬μ ν μλ€.
1.1 μ¬κ· νΈλ¦: μΆκ° μΈμ λκΈ°κΈ°
- μ«μ λ°°μ΄μ λ°μ λ°°μ΄ λ΄ κ° μ«μλ₯Ό λ λ°°λ‘ λ§λλ μκ³ λ¦¬μ¦μ μννλ €κ³ νλ€.
- λ¨ μ λ°°μ΄μ λ§λλ κ²μ΄ μλλΌ λ°°μ΄ μ체μμ μμ νκ² λ€.
- μ μ리(in-place) μμ
- λ°μ΄ν°λ₯Ό μ‘°μ(λ³κ²½)νλ κΈ°λ³Έμ μΈ λ°©μμ μΌλ°μ μΌλ‘ λ κ°μ§λ€.
- 첫 λ²μ§Έ λ°©λ²μ μλ λ°°μ΄μ κ·Έλλ‘ λκ³ “λ λ°°λ‘ λ§λ ” λ°μ΄ν°λ‘ μ΄λ£¨μ΄μ§ μ λ°°μ΄μ μμ±νλ κ²μ΄λ€.
- λ λ²μ§Έ λ°©λ²μ μ μ리(in-place) μμ μ΄λΌ λΆλ¦°λ€. μ€μ ν¨μμ μ λ¬λ μλ³Έ λ°°μ΄μ λ°κΎΌλ€λ λ»μ΄λ€.
- μ λ°°μ΄μ μμ±νλ μλ λ°°μ΄μ μ μ리μμ μμ νλ μ νμ μ¬μ©μμ λͺ«μ΄κ³ νλ‘μ νΈ μν©μ λ°λΌ λ¬λΌμ§λ€.
- μ μ리(in-place) μμ
- μ νμ μΈ λ£¨νμ²λΌ μΈλ±μ€λ₯Ό κΈ°λ‘νκΈ° μν΄μλ ν¨μλ₯Ό μμ νμ¬ μΈμλ‘ μΈλ±μ€λ₯Ό μ λ¬νκ² λ§λ€λ©΄ λλ€.
2. μ¬κ· μΉ΄ν κ³ λ¦¬: κ³μ°
- νμ λ¬Έμ μ κ³μ°κ²°κ³Όμ κΈ°λ°ν΄ κ³μ°ν μ μμ λ
- νμ λ¬Έμ (subproblem)
- μ λ ₯μ λ μκ² ν λκ°μ λ¬Έμ
- factorial() ν¨μκ° μ΄μ ν΄λΉνλ€.
2.1 λ κ°μ§ κ³μ° λ°©μ
- κ³μ° ν¨μλ₯Ό μμ±νλ λ°©μμ μν₯μ(bottom up)κ³Ό νν₯μ(top down) λ λ°©μμ΄ μλ€.
- λ λ°©μ λͺ¨λ μ¬κ·λ‘ ꡬν κ°λ₯νλ€.
- κ·Έλ¬λ μν₯μμ μ¬κ·λ‘ μμ±νλ κ²μ κ·Έλ€μ§ κ°κ²°νμ§ λͺ»νλ©° 루νμ λΉν΄ μ΄λ λ€ ν μ₯μ λ μλ€.
- νμ§λ§ νν₯μμ μ¬κ·λ₯Ό μ¨μΌ νλ€. νν₯μμ ꡬνν λ°©λ²μ μ¬κ·λΏμ΄λ€.
- μ΄κ²μ΄ μ¬κ·κ° κ°λ ₯ν λκ΅¬λ‘ μ리μ‘κ² λ μ΄μ μ΄λ€.
3. νν₯μ μ¬κ·: μλ‘μ΄ μ¬κ³ λ°©μ
- μ¬κ·λ νν₯μ λ°©μμ ꡬννλ λ° νμνλ€.
- νν₯μ μ¬κ³ λ°©μμ **λ¬Έμ λ₯Ό ν΄κ²°νλ μλ‘μ΄ μ¬κ³ μ λ΅(mental strategy)**μ μ 곡νλ€.
- μ¦, λ¬Έμ λ₯Ό μμ ν λ€λ₯Έ λ°©μμΌλ‘ μκ°νκ² ν΄ μ€λ€.
- νν₯μμΌλ‘ νμ΄ λκ° λλ λ¨Έλ¦Ώμμμ “λ¬Έμ λ₯Ό λ€λ‘ 미루겔 λλ€.
- νν₯μ factorial ꡬνμ ν΅μ¬ μ€μ 보μ.
- μΈλΆ μ¬νμ νμ λ¬Έμ μμ λ€λ£¨κ² λμ.
- return number * factorial(number - 1)
3.1 νν₯μ μ¬κ³ μ μ°¨
- νν₯μ λ¬Έμ λ₯Ό ν λ λ€μ μ¬κ³ μ μ°¨λ₯Ό λ°λΌ μκ°νλ©΄ λμμ΄ λλ€.
- μμ± μ€μΈ ν¨μλ₯Ό μ΄λ―Έ λκ΅°κ° κ΅¬νν΄ λμλ€κ³ μμνμ.
- λ¬Έμ μ νμ λ¬Έμ λ₯Ό μ°Ύμ.
- νμ λ¬Έμ μ ν¨μλ₯Ό νΈμΆνλ©΄ μ΄λ»κ² λλμ§ λ³΄κ³ κ±°κΈ°μλΆν° μμνμ.
3.2 λ°°μ΄ ν©
- μ£Όμ΄μ§ λ°°μ΄ λ΄ λͺ¨λ μλ₯Ό ν©νλ sumμ΄λΌλ ν¨μλ₯Ό μμ±νλ€κ³ νμ.
- κ°μ₯ λ¨Όμ ν μΌμ sum ν¨μκ° μ΄λ―Έ ꡬνλμ΄ μλ€κ³ κ°μ νλ κ²μ΄λ€.
- λ€μμΌλ‘ ν μΌμ νμ λ¬Έμ λ₯Ό μ°Ύλ κ²μ΄λ€.
- μ΄ μμ μ νμ λ¬Έμ λ λ°°μ΄μ 첫 λ²μ§Έ μμλ₯Ό μ μΈν λΆλΆλ°°μ΄μ΄λ€.
return array[0] + sum(array[1, array.length - 1])
- λ§μ§λ§μΌλ‘ κΈ°μ λ¬Έμ λ₯Ό μ²λ¦¬νλ€.
- κΈ°μ 쑰건: λ°°μ΄μ μμκ° νλλ§ λ¨μμ λ
4. κ³λ¨ λ¬Έμ
- μλ‘μ΄ μ¬κ³ μ λ΅μ μ¬μ©ν΄ νν₯μ μ¬κ·λ‘ νΉμ κ³μ° λ¬Έμ λ₯Ό ν΄κ²°νλ λ²μ λ°°μ λ€.
- μμ λ₯Ό ν΅ν΄ λ μμΈν μμ보μ.
- Nκ°μ§λ¦¬ κ³λ¨μ΄ μκ³ λκ΅°κ° ν λ²μ νλ νΉμ λ, μΈ κ³λ¨κΉμ§ μ¬λΌκ° μ μλ€κ³ νμ. κ³λ¨ λκΉμ§ μ¬λΌκ°λ “κ²½λ‘”λ λͺ κ°μΌκΉ? Nμ΄ μ£Όμ΄μ§ λ μ΄λ₯Ό κ³μ°νλ ν¨μλ₯Ό μμ±νλΌ.
- μ¬κ·μ μ¬κ³ λ°©μμ μ·¨νμ§ μμΌλ©΄ μ΄ κ³μ°μ μννλ μκ³ λ¦¬μ¦μ μ΄ν΄νκΈ° νλ€λ€.
- κ·Έλ¬λ νν₯μμΌλ‘ μκ°νλ©΄ λ¬Έμ κ° λλλλ‘ λ¨μν΄μ§λ€.
- 11κ°μ§λ¦¬ κ³λ¨μ μ¬λΌκ°λ κ²½μ°μ μλ λͺ κ°μΌκΉ?
- μ°μ , 10κ°μ§λ¦¬ κ³λ¨μ μ¬λΌκ°λ νμ λ¬Έμ μ κ²½μ°μ μκ° νμνλ€.
- κ·ΈλΌ 9κ°μ§λ¦¬ κ³λ¨μ μ¬λΌκ°λ νμ λ¬Έμ μ κ²½μ°μ μλ νμνλ€.
- 8κ°μ§λ¦¬ κ³λ¨μ μ¬λΌκ°λ νμ λ¬Έμ μ κ²½μ°μ μλ νμνλ€.
- κ·ΈλΌ 11κ°μ§λ¦¬ κ³λ¨μ μ¬λΌκ°λ κ²½μ°μ μλ λ€μκ³Ό κ°λ€.
- 10κ°μ§λ¦¬ κ³λ¨μ μ¬λΌκ°λ κ²½μ°μ μ → λ§μ§λ§μΌλ‘ κ³λ¨ νλλ₯Ό μ¬λΌκ° λ
- 9κ°μ§λ¦¬ κ³λ¨μ μ¬λΌκ°λ κ²½μ°μ μ → λ§μ§λ§μΌλ‘ κ³λ¨ λ κ°λ₯Ό μ¬λΌκ° λ
- 8κ°μ§λ¦¬ κ³λ¨μ μ¬λΌκ°λ κ²½μ°μ μ → λ§μ§λ§μΌλ‘ κ³λ¨ μΈ κ°λ₯Ό μ¬λΌκ° λ
- μ΄μΈμ κ²½μ°μ μλ μ‘΄μ¬νμ§ μλλ€.
- μ¦, μ΄ λ¬Έμ μ λ΅μ λ€μκ³Ό κ°λ€.
- number_of_paths(n - 1) + number_of_paths(n - 2) + number_of_paths(n - 3)
4.1 κ³λ¨ λ¬Έμ κΈ°μ 쑰건
- μ΄ ν¨μμ κΈ°μ 쑰건μ λ€μ κΉλ€λ‘λ€.
- μ£Όμ΄μ§λ Nμ λ°λΌ ν¨μλ μκΈ° μμ μ 0 λλ μμ Nμ λν΄ νΈμΆν μ μλ€.
- μ΄ μ‘°κ±΄μ ꡬννλ λ°©μ μ€ νλλ κΈ°μ 쑰건μ λͺ¨λ νλμ½λ©νλ κ²μ΄λ€.
- return 0 if n <= 0 return 1 if n == 1 return 2 if n == 2 return 4 if n == 3
- λ€λ₯Έ ν κ°μ§λ μμ€ν μ μ리νκ² μ‘°μν μ΄μνμ§λ§ ν¨κ³Όμ μΈ κΈ°μ 쑰건μ κ³ μνλ κ²μ΄λ€.
- return 0 if n < 0 return 1 if n == 1 || n == 0
5. μ λκ·Έλ¨ μμ±
- μ λκ·Έλ¨μ΄λ λ¬Έμμ΄ λ΄ λͺ¨λ λ¬Έμλ€μ μ¬λ°°μ΄ν λ¬Έμμ΄μ΄λ€.
- λ¬Έμμ΄μ λͺ¨λ μ λκ·Έλ¨μ κ΅¬ν΄ λ³΄μ.
- μ΄ λ¬Έμ λ₯Ό νν₯μ μ¬κ³ λ°©μμΌλ‘ μ κ·Όν΄ λ³΄μ.
- μλ₯Ό λ€μ΄, λ¬Έμμ΄ “abcd”μ μ λκ·Έλ¨μ λͺ¨λ κ΅¬ν΄ λ³΄μ.
- “abc”λ μ΄ λ¬Έμ μ νμ λ¬Έμ κ° λ μ μλ€.
- κ·Έλ λ€λ©΄ “abc”μ λͺ¨λ μ λκ·Έλ¨μ λ°ννλ anagram ν¨μκ° μμ λ μ΄λ₯Ό μ΄λ»κ² μ¬μ©ν΄μ “abcd”μ λͺ¨λ μ λκ·Έλ¨μ λ§λ€μ΄λΌ μ μμκΉ?
- “abc”μ κ° μ λκ·Έλ¨ λ΄ κ°λ₯ν μ리λ§λ€ “d”λ₯Ό λΆμ¬ “abcd”μ λͺ¨λ μ λκ·Έλ¨μ λ§λ€μ΄ λΌ μ μλ€.
5.1 μ λκ·Έλ¨ μμ±μ ν¨μ¨μ±
- μ λκ·Έλ¨ μμ± μκ³ λ¦¬μ¦μ ν¨μ¨μ±μ λΆμν΄ λ³΄μ.
- λ¬Έμμ΄ 4κ°: μ λκ·Έλ¨ 4 * 3 * 2 * 1
- λ¬Έμμ΄ 5κ°: μ λκ·Έλ¨ 5 * 4 * 3 * 2 * 1
- λ¬Έμμ΄ 6κ°: μ λκ·Έλ¨ 6 * 5 * 4 * 3 * 2 * 1
- μ¦, N!μ΄λ€.
- O(N!)
- μ΄λ₯Ό κ³μΉ μκ°factorial timeμ΄λΌκ³ λ λΆλ₯Έλ€.
- μ΄λ λ§€μ° λ리μ§λ§(O(2^N))λ³΄λ€ λ리λ€) λͺ¨λ μ λκ·Έλ¨μ μμ±ν΄μΌ νλλ° λ¬Έμ Nκ°λ‘ λ λ¨μ΄μλ μ λκ·Έλ¨μ΄ N!κ°μ΄λ λ λμ λ°©λ²μ μλ€.
6. λ§λ¬΄λ¦¬
- μ¬κ·λ λ€μν λ¬Έμ λ₯Ό ν΄κ²°νλ νλ₯ν λꡬμ΄μ§λ§ μ£Όμ κΉκ² μ¬μ©νμ§ μμΌλ©΄ μ½λκ° νμ ν λλ €μ§λ€.
- λ€μ μ₯μμλ μ¬κ·λ₯Ό μ¬μ©νλ μ½λλ₯Ό κΉλνκ³ λΉ λ₯΄κ² μ μ§μν€λ λ²μ λ°°μ΄λ€.
'ποΈ μ± & κ°μ μ 리 > ποΈ λꡬλ μλ£κ΅¬μ‘°μ μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
13μ₯ μλλ₯Ό λμ΄λ μ¬κ· μκ³ λ¦¬μ¦ (0) | 2022.12.08 |
---|---|
12μ₯ λμ νλ‘κ·Έλλ° (0) | 2022.12.08 |
10μ₯ μ¬κ·λ₯Ό μ¬μ©ν μ¬κ·μ λ°λ³΅ (0) | 2022.12.05 |
9μ₯ μ€νκ³Ό νλ‘ κ°κ²°ν μ½λ μμ± (0) | 2022.11.18 |
8μ₯ ν΄μ ν μ΄λΈλ‘ λ§€μ° λΉ λ₯Έ 룩μ (0) | 2022.11.18 |