https://softeer.ai/practice/6293
Softeer - ํ๋์๋์ฐจ๊ทธ๋ฃน SW์ธ์ฌํ๋ณดํ๋ซํผ
softeer.ai
์ํํฐ์ด ๋ ๋ฒจ 3.
๋ํ์ ์ธ DP๋ฌธ์ ์ธ ๋ฏ ํ๋ค!
ํฌ๊ธฐ ๋น๊ต๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ผญ ๊ผญ ๋ฐฐ์ด์ Number๋ก ๋ฐ๊ฟ์ค์ผ ํ๋ค (์ด๊ฑฐ๋๋ฌธ์ ์ฒซ ์ ์ถ ํ๋ฆผ ใ ใ กใ )
์์ค๋ ๋ ํ๋ค๊ฒ ํด.....๐ซ
ํ ๋๋ ๋ชฐ๋์ง๋ง LIS๋ผ๋ ๋ฌธ์ ์ ํ์ด๋ผ๊ณ ํจ!!
<< ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด(LIS) ์๊ณ ๋ฆฌ์ฆ>>
Longest Increasing Subsequence
: ์ฃผ์ด์ง ์์ด์์ ์์๋ค์ ์์๋ฅผ ์ ์งํ๋ฉด์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
n๋ฒ์งธ ์ธ๋ฑ์ค ๋์ ๋ฐ์ ๋, ๋ ์ด๋์ ์๋?๋ฅผ ์๊ฐํ๋ฉด ๋๋ค.
๋ ๊ทธ๋ ์ง๋ง dp๋ ์ฝํ ์ ๋์ค๋ฉด ํญ์ ์ฐ์ตํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์ด๋ ต๋ค ใ ใ
๋์ ํ์ด
const fs = require('fs');
const input = fs.readFileSync(0,'utf-8').trim().split('\n');
let n = Number(input[0].trim());
let heightList = input[1].trim().split(' ').map(Number);
// n๋ฒ์งธ ๋์ ๋ฐ์ ๋ ์ด๋์ ์ฌ ์ ์๋์ง ๊ฒฝ์ฐ์ ์
let dp = new Array(n).fill(1);
for(let i=0; i<n; ++i){
let nownum = heightList[i];
for(let j=0; j<i; ++j){
if(nownum > heightList[j]) {
dp[i] = Math.max(dp[j]+1, dp[i]);
}
}
}
console.log(Math.max(...dp));