[JavaScript/section 10] 03 - μ΅λ λΆλΆ μ¦κ° μμ΄
π μ΅λ λΆλΆ μ¦κ°μμ΄(LIS)
Nκ°μ μμ°μλ‘ μ΄λ£¨μ΄μ§ μμ΄μ΄ μ£Όμ΄μ‘μ λ, κ·Έμ€μμ κ°μ₯ κΈΈκ² μ¦κ°νλ(μμ μμμ ν° μλ‘) μμλ€μ μ§ν©μ μ°Ύλ λ¬Έμ μ΄λ€. μλ₯Ό λ€μ΄, μμκ° 2, 7, 5, 8, 6, 4, 7, 12, 3μ΄λ©΄ κ°μ₯ κΈΈκ² μ¦κ°νλλ‘ μμλ€μ μ°¨λ‘λλ‘ λ½μλ΄λ©΄ 2, 5, 6, 7, 12λ₯Ό λ½μλ΄μ΄ κΈΈμ΄κ° 5μΈ μ΅λ λΆλΆ μ¦κ° μμ΄μ λ§λ€ μ μλ€.
μ λ ₯μ€λͺ
첫째 μ€μ μ λ ₯λλ λ°μ΄ν°μ μ N(1<=N<=1,000, μμ°μ)λ₯Ό μλ―Ένκ³ , λμ§Έ μ€μ Nκ°μ μ λ ₯λ°μ΄ν°λ€μ΄ μ£Όμ΄μ§λ€.
λμ§Έ μ€μ Nκ°μ μ λ ₯λ°μ΄ν°λ€μ΄ μ£Όμ΄μ§λ€.
μΆλ ₯μ€λͺ
첫 λ²μ§Έ μ€μ λΆλΆ μ¦κ° μμ΄μ μ΅λ κΈΈμ΄λ₯Ό μΆλ ₯νλ€.
μ λ ₯μμ | μΆλ ₯μμ |
8 5 3 7 8 6 2 9 4 |
4 |
π νμ΄ λ°©λ²
arr[ i ](μΈλ±μ€) - μ¦κ° μμ΄μμ λ§μ§λ§ νμ ν΄λΉνλ μ«μ
dy[ i ] - arr[ i ] (i λ²μ§Έ μμ)κ° μμ΄μ λ§μ§λ§ νμ ν΄λΉνλ€λ 쑰건νμ λΆλΆ μ¦κ° μμ΄μ κΈΈμ΄
- arr[3]μ ν΄λΉνλ μμ 8μ΄ μ¦κ° μμ΄μ λ§μ§λ§ νμ ν΄λΉνλ μ«μλ‘ μμ μ‘΄μ¬νλ μμλ€κ³Ό λΉκ΅νλ€.
- μμ μ‘΄μ¬νλ μμ μ€ arr[3]λ³΄λ€ μμΌλ©΄μ λΆλΆ μ¦κ° μμ΄μ κΈΈμ΄κ° κ°μ₯ κΈ΄ κΈΈμ΄μ 1(μκΈ° μμ ν¬ν¨)μ λν κ°μ dy[3]μ μ μ₯νλ€.
- μ κ³Όμ μ λ°λ³΅ν ν dy λ°°μ΄μ μμ μ€ μ΅λ κΈΈμ΄λ₯Ό ꡬνλ€.
function solution(arr) {
let answer = 0;
let dy = Array.from({ length: arr.length }, () => 0);
// arr[0] μμ μμκ° μ‘΄μ¬νμ§ μκΈ° λλ¬Έμ μ¦κ° μμ΄μ μκΈ° μμ λ§ ν¬ν¨νλ―λ‘ 1λ‘ μ΄κΈ°ν
dy[0] = 1;
for (let i = 1; i < arr.length; i++) {
let max = 0;
for (let j = i - 1; j >= 0; j--) {
if (arr[j] < arr[i] && max < dy[j]) {
max = dy[j];
}
}
dy[i] = max + 1;
}
answer = Math.max(...dy);
return answer;
}
let arr = [2, 7, 5, 8, 6, 4, 7, 12, 3];
console.log(solution(arr));