본문 바로가기

BOJ/다이나믹 프로그래밍

BOJ : 11722 가장 긴 감소하는 부분 수열 (JS)

728x90

소스코드

let fs = require('fs');
const filePath = process.platform === `linux` ? `/dev/stdin` : `예제.txt`; 
let input = fs.readFileSync(filePath).toString().split('\n');
const c = console.log

n = Number(input[0])

let numbers = input[1].split(" ").map(Number)

let dp = []

for(let i = 0 ; i < n ; i++){
    dp[i] = 1
}

for(let i = 1 ; i < n ; i++){
    for(let j = 0 ; j < i ; j++){
        if (numbers[i] < numbers[j]) {
            dp[i] = Math.max(dp[i],dp[j]+1)
        }
    }
}

c(Math.max(...dp))

 

풀이

dp테이블을 1로 초기화 해준 후, 인덱스로부터 낮은 수를 만날때마다 +1값을 해주었다.

 

문제

https://www.acmicpc.net/problem/11722

 

11722번: 가장 긴 감소하는 부분 수열

수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} 

www.acmicpc.net

 

728x90

'BOJ > 다이나믹 프로그래밍' 카테고리의 다른 글

BOJ : 9656 돌게임2 (JS)  (0) 2023.01.04
BOJ : 1965 상자넣기 (JS)  (0) 2023.01.03
BOJ : 11054 가장긴바이토닉부분수열 (JS)  (0) 2023.01.01
BOJ : 10844 쉬운계단수 (JS)  (0) 2022.12.30
BOJ : 2193 이친수 (JS)  (0) 2022.12.29