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 |