[Programmers, Lv.2] λ λ°λ¨ΉκΈ° (feat. λμ κ³νλ², μλ°μ€ν¬λ¦½νΈ)
λ¬Έμ μ€λͺ
λ λ°λ¨ΉκΈ° κ²μμ νλ €κ³ ν©λλ€. λ λ°λ¨ΉκΈ° κ²μμ λ (land)μ μ΄ Nν 4μ΄λ‘ μ΄λ£¨μ΄μ Έ μκ³ , λͺ¨λ μΉΈμλ μ μκ° μ°μ¬ μμ΅λλ€. 1νλΆν° λ μ λ°μΌλ©° ν νμ© λ΄λ €μ¬ λ, κ° νμ 4μΉΈ μ€ ν μΉΈλ§ λ°μΌλ©΄μ λ΄λ €μμΌ ν©λλ€. λ¨, λ λ°λ¨ΉκΈ° κ²μμλ ν νμ© λ΄λ €μ¬ λ, κ°μ μ΄μ μ°μν΄μ λ°μ μ μλ νΉμ κ·μΉμ΄ μμ΅λλ€.
μλ₯Ό λ€λ©΄,
| 1 | 2 | 3 | 5 |
| 5 | 6 | 7 | 8 |
| 4 | 3 | 2 | 1 |
λ‘ λ μ΄ μ£Όμ΄μ‘λ€λ©΄, 1νμμ λ€λ²μ§Έ μΉΈ (5)λ₯Ό λ°μμΌλ©΄, 2νμ λ€λ²μ§Έ μΉΈ (8)μ λ°μ μ μμ΅λλ€.
λ§μ§λ§ νκΉμ§ λͺ¨λ λ΄λ €μμ λ, μ»μ μ μλ μ μμ μ΅λκ°μ returnνλ solution ν¨μλ₯Ό μμ±ν΄ μ£ΌμΈμ. μ μμ κ²½μ°, 1νμ λ€λ²μ§Έ μΉΈ (5), 2νμ μΈλ²μ§Έ μΉΈ (7), 3νμ 첫λ²μ§Έ μΉΈ (4) λ μ λ°μ 16μ μ΄ μ΅κ³ μ μ΄ λλ―λ‘ 16μ return νλ©΄ λ©λλ€.
μ νμ¬ν
- νμ κ°μ N : 100,000 μ΄νμ μμ°μ
- μ΄μ κ°μλ 4κ°μ΄κ³ , λ (land)μ 2μ°¨μ λ°°μ΄λ‘ μ£Όμ΄μ§λλ€.
- μ μ : 100 μ΄νμ μμ°μ
μ μΆλ ₯ μ
land | answer |
---|---|
[[1,2,3,5],[5,6,7,8],[4,3,2,1]] | 16 |
λ¬Έμ νμ΄
μ΄ λ¬Έμ λ λμ κ³νλ²μ ν΅ν΄ νμ΄ν μ μμ΅λλ€. (μλ°μ€ν¬λ¦½νΈ μΈμ μΈμ΄λ‘ ν κ²½μ° μμ νμμΌλ‘λ νμ΄κ° κ°λ₯νμ§λ§, μλ°μ€ν¬λ¦½νΈλ‘λ μκ° νκ³λ‘ μΈν΄ λμ κ³νλ²λ§ κ°λ₯ν κ²μΌλ‘ μκ³ μμ΅λλ€..π )
λμ κ³νλ²μ΄λ?
λμ κ³νλ²(Dynamic Programming, aka DP)μ κΈ°λ³Έμ μΈ μμ΄λμ΄λ‘ νλμ ν° λ¬Έμ λ₯Ό μ¬λ¬ κ°μ μμ λ¬Έμ λ‘ λλμ΄μ κ·Έ κ²°κ³Όλ₯Ό μ μ₯νμ¬ λ€μ ν° λ¬Έμ λ₯Ό ν΄κ²°νλ νμ΄ λ°©μμ μλ―Έν©λλ€. μ¦ νΉμ μκ³ λ¦¬μ¦μ΄λΌκΈ° 보λ€λ νλμ λ¬Έμ ν΄κ²° ν¨λ¬λ€μμΌλ‘ λ³Ό μ μμ΅λλ€.
μ λμ κ³νλ²μ μ¬μ©ν κΉ
λμ κ³νλ²μ μ¬μ©νλ μ΄μ λ‘λ μΌλ°μ μΈ μ¬κ·μ νκ³λ₯Ό 극볡νκΈ° μν΄μμ λλ€. νΉμ νμλ‘ λ°λ³΅λ μ¬κ·ν¨μμ κ°μ ꡬν΄μΌ ν λ, ν΄λΉ μ¬κ·ν¨μλ₯Ό νμν λ λ§λ€ λ°λ³΅νκ² λλ©΄ μμ²λ μκ°μ΄ μμλ©λλ€. μ΄λ―Έ νλ² κ·Έ λ΅μ ꡬν μ μ΄ μμμλ λΆκ΅¬νκ³ λ§μ΄μ£ .
μ΄μ λ°ν΄ νλ² κ΅¬ν νΉμ νμμ μ¬κ·ν¨μ κ°μ κΈ°μ΅ν΄λλ€κ°, λ€μ μ¬κ·μμ μ΄μ μ ꡬνλ μ¬κ·ν¨μ κ°μ μ΄μ©νλ λ°©μμ μ΄μ©νλ©΄ μμλλ μκ°μ νκΈ°μ μΌλ‘ μ€μΌ μ μμ΅λλ€. μ΄λ κ² λμ κ³νλ²μ ν° λ¬Έμ λ₯Ό μμ λ¬Έμ λ‘ μͺΌκ°μ΄ μ 볡ν΄λκ°λ λ°©μμΌλ‘ λ¬Έμ λ₯Ό νμ΄ν©λλ€.
λνμ μΈ λμ κ³νλ² νμ΄
λ‘λ νΌλ³΄λμΉ μμ΄μ΄ μμ΅λλ€.
μλμ κ°μ΄ f(n) = f(n-1) + f(n-2)
κ° λ°λ³΅λλ μμ΄μ νΌλ³΄λμΉ μμ΄μ΄λΌκ³ ν©λλ€.
λ§μ½ 100λ²μ§Έ νΌλ³΄λμΉ μμ΄μ ꡬνκΈ° μν΄μ μ¬κ·λ₯Ό λͺλ²μ΄λ λ°λ³΅ν΄μΌ ν κΉμ? 맀 νΌλ³΄λμΉ μλ₯Ό ꡬν λ λ§λ€ μ¬κ·κ° κΈ°νκΈμμ μΌλ‘ λμ΄λκ² λλ©°, 100λ²μ§Έμ λ¬νμ λλ μ½ 7ν΄ ####κ²½ ####μ‘° ... λ² μ΄μ ν¨μκ° νΈμΆλλ€κ³ ν©λλ€.
μ΄λ¬ν μν©μμ λμ κ³νλ²μ μ΄μ©νλ©΄ νκΈ°μ μΌλ‘ μ¬κ· νμλ₯Ό μ€μΌ μ μμ΅λλ€. 100λ²μ§Έ μμ λλ¬ν λ κΉμ§ κ·Έ μ§μ μ νΌλ³΄λμΉ μλ₯Ό κΈ°μ΅νμ¬, κΈ°μ΅λ μ νΌλ³΄λμΉ μλ₯Ό μ΄μ©νμ¬ λ€μ νΌλ³΄λμΉ μλ₯Ό ꡬνλ€λ©΄, 0(n)
μκ°λ³΅μ‘λλ‘ 100λ²μ§Έ νΌλ³΄λμΉ μλ₯Ό ꡬν μ μμ΅λλ€.
μ΄λ κ² μ½ 7ν΄…μ μ¬κ· νμλ₯Ό 98λ²μΌλ‘ μ€μ΄λ κ²μ ν΅ν΄ λμ κ³νλ²μ λ₯λ ₯(?)μ νμΈν μ μμ΅λλ€.
λ¬Έμ νμ΄ μ½λ (μλ°μ€ν¬λ¦½νΈ)
λ€μ λ¬Έμ λ‘ λμμμ, μ΄λ² λ λ°λ¨ΉκΈ° λ¬Έμ λ λμ κ³νλ²μ μ΄μ©ν΄μ νμ΄ν μ μμ΅λλ€.
μ΄ λ¬Έμ μμ νμν λ΅μ μ€μ§ ‘μ΅λμ κ°’μ λλ€. λ°λΌμ μ΄μ λ μμ κ°λ₯ν μ΅λμ κ°μ 미리 μ μ₯ν΄λμλ€κ°, λ€μ λ μΌλ‘ μ΄λν λ 미리 μ μ₯ν΄λ μ΄μ λ μ μ΅λμ κ°μ μ΄μ©νμ¬ λ€μ μ΅λμ κ°μ ꡬνλ λ°©μμ μ΄μ©νλ©΄ λ©λλ€.
μ΄μ λ μ κ°μ λ€μ μ΅λ κ°μ λν λλ, κ°μ μΈλ±μ€μ λ μ λ°μ μ μλ€λ κ·μΉμ λ°μνμ¬, νμ¬ μΈλ±μ€ μΈμ λλ¨Έμ§ λ μ κ°λ€ μ€ μ΅λ κ°μ λν΄μ£Όλ©΄ λ©λλ€.
μμ νμ΄λ₯Ό μλ°μ€ν¬λ¦½νΈ μ½λλ‘ νλ©΄ λ€μκ³Ό κ°μ΅λλ€.
const solution = land =>
Math.max(...land.reduce((a, c) =>
[
c[0] + Math.max(a[1], a[2], a[3]),
c[1] + Math.max(a[0], a[2], a[3]),
c[2] + Math.max(a[0], a[1], a[3]),
c[3] + Math.max(a[0], a[1], a[2]),
];
, [0, 0, 0, 0]);
λ€λ§ μμ μ½λλ 맀 λ μ κ°μκ° 4κ°λ‘ μ ν΄μ Έ μλ€λ νκ³κ° μμ΅λλ€. ν΄λΉ νκ³λ₯Ό 극볡ν΄μ, λ μ κ°μμ μ μ°νκ² λμν μ μλ μ½λλ‘ λ¦¬ν©ν λ§νλ©΄ μλ μ½λμ κ°μ΅λλ€.
const solution = (land) =>
Math.max(
...land.reduce(
(a, c) =>
c.map((v, i) => v + Math.max(...a.filter((_, aIdx) => i !== aIdx))),
[0, 0, 0, 0]
)
);
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μ΄λ‘ ] μμ΄ (1) | 2023.06.15 |
---|---|
[νλ‘κ·Έλλ¨Έμ€] μμ μ°ΎκΈ° (Javascript) (0) | 2023.06.15 |
[νλ‘κ·Έλλ¨Έμ€] ν° μ λ§λ€κΈ° (0) | 2023.06.14 |
[νλ‘κ·Έλλ¨Έμ€] μ λ ₯λ§μ λλ‘ λλκΈ° (2) | 2023.06.13 |
[μ΄λ‘ ] BFSμ DFS (javascript) (0) | 2023.06.13 |