[LIS]μ΅λ λΆλΆ μ¦κ° μμ΄
λ¬Έμ
Nκ°μ μμ°μλ‘ μ΄λ£¨μ΄μ§ μμ΄μ΄ μ£Όμ΄μ‘μ λ, κ·Έ μ€μμ κ°μ₯ κΈΈκ² μ¦κ°νλ(μμ μμμ ν° μλ‘) μμλ€μ μ§ν©μ μ°Ύλ νλ‘κ·Έλ¨μ μμ±νλΌ. μλ₯Ό λ€μ΄, μμκ° 2, 7, 5, 8, 6, 4, 7, 12, 3 μ΄λ©΄ κ°μ₯ κΈΈκ² μ¦κ°νλλ‘ μμλ€μ μ°¨λ‘λλ‘ λ½μλ΄λ©΄ 2, 5, 6, 7, 12λ₯Ό λ½μλ΄μ΄ κΈΈμ΄κ° 5μΈ μ΅λ λΆλΆ μ¦κ° μμ΄μ λ§λ€ μ μλ€.
λ¬Έμ νμ΄
μ΅μ₯ μ¦κ° λΆλΆ μμ΄(LIS, Longest Increasing Subsequence)
- μμκ° nκ°μΈ λ°°μ΄μ μΌλΆ μμλ₯Ό 골λΌλ΄μ λ§λ λΆλΆ μμ΄ μ€, κ° μμκ° μ΄μ μμλ³΄λ€ ν¬λ€λ 쑰건μ λ§μ‘±νκ³ , κ·Έ κΈΈμ΄κ° μ΅λμΈ λΆλΆ μμ΄μ μΌμ»«μ
ν΄λΉ λ¬Έμ μμ κΈΈμ΄κ° μ΅λμΈ λΆλΆμμ΄μ κ°λ§μ μ°Έμ‘°νμ¬ 1μ κ°μ°νλ€λ νμ΄λ λ€μ ν¬μ€ν μ λ¬Έμ λ₯Ό νμ΄ λ΄μΌλ‘μ¨ μ’ λ μ½κ² μ΄ν΄ν μ μμλ€.
https://choi95.tistory.com/33?category=854389
보μ΄λ νμ
μ μλμ΄ N(1<=N<=1000)λͺ μ νμμ μΌλ ¬λ‘ μΈμ λ€. μΌλ ¬λ‘ μ μλ νμμ ν€κ° μμμλΆν° μμλλ‘ μ£Όμ΄μ§ λ, 맨 μμ μ μλ μ μλμ΄ λ³Ό μ μλ νμμ μλ₯Ό ꡬνκ³ μ νλ€. (μμ μ μλ
choi95.tistory.com
μ½λ
function solution(arr) {
let answer = 0;
let dy = Array.from({length: arr.length}, () => 0);
dy[0] = 1;
for(let i = 1; i < arr.length; i++) {
let max = 0; //μ΄λ ν μμμ κ°λ³΄λ€ ν¬μ§ μμ κ²½μ° κ·Έ κ°μ΄ μκΈ° μμ λ§μ ν¬ν¨ν κ²½μ°μ μμΈ 1λ‘ μ΄κΈ°ν λ μ μλλ‘
for(let j = i - 1; j >= 0; j--) {
if(arr[i] > arr[j] && dy[j] > max) { //μ΄μ μμλ³΄λ€ ν¬κ³ ν΄λΉ μμμ λΆλΆμμ΄μ΄ μ΅μ₯μΌ κ²½μ°
max = dy[j];
}
}
dy[i] = max + 1;
}
answer = Math.max(...dy);
return answer;
}
let arr = [5, 3, 7, 8, 6, 2, 9, 4];
console.log(solution(arr));
function solution(arr){
let answer=0;
let dy=Array.from({length:arr.length}, ()=>0);
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] && dy[j]>max){
max=dy[j];
}
}
dy[i]=max+1;
answer=Math.max(answer, dy[i]);
}
return answer;
}
let arr=[5, 3, 7, 8, 6, 2, 9, 4];
console.log(solution(arr));