1. ๋ฌธ์ : https://leetcode.com/problems/longest-increasing-subsequence/
๋ง๊ทธ๋๋ก ์ฆ๊ฐํ๋ ๋ฐฐ์ด ์ฐพ๊ธฐ
2. ํ์ด
dp ๋ฌธ์
์ญ์์ผ๋ก ๋๋ฉด์ ์์ ๋ณด๋ค ํฐ ์์ dp ์ค ๊ฐ์ฅ ํฐ๊ฐ +1์ dp์ ์ ์ฅ
์ด๋ ์ฆ๊ฐํ๋ ๊ฒ์ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์๋ ์ด์ -> ์์๋ถํฐ ๋๋ณด๋ค ํฐ์๋ฅผ dp์ ์ ์ฅํด๊ฐ๋ฉฐ ๋ฐ๋ณต๋ฌธ์ ๋๊ธฐ๋๋ฌธ์ ํด๋น dp์ ์ ์ฅ๋ ๊ฐ ์์ฒด๊ฐ ์ฆ๊ฐํ๋ ๊ฒฝ์ฐ์ ์๋ง ๊ณ ๋ คํ ๊ฒ์ด๊ธฐ ๋๋ฌธ
๋๋ณด๋ค ํฐ ์ dp์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ณ ๋ฅด๋ ์ด์ ? -> ๊ณ์ ์ฆ๊ฐํ๋ ๊ฐ ์ค ๊ฐ์ฅ ๋ง์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด์ผํ๊ธฐ ๋๋ฌธ
ex)
์ซ์ 2๋ ์ฝ์ธ2 ํ๋ฒ์ ๋ง๋ค ์ ์์ -> ์ด๊ฑธ ์ด๋ป๊ฒ dp๋ก ์๋์ผ๋ก ํ๋? -> dp[i-money์ฆ 0] +1 ๊ณผ dp[i] ๊ฐ ์ค ๋น๊ตํด์ ๋ฃ์ผ๋ฉด๋จ
3. ์ฝ๋
import java.util.*;
class Solution {
public int lengthOfLIS(int[] nums) {
int len = nums.length;
if(len == 1) return 1;
int[] dp = new int[len];
Arrays.fill(dp, 1);
int maxVal = 0;
for(int i=len-2; i>-1; i--){
int maxDp = 0;
for(int j=i+1; j<len; j++){
if(nums[i] < nums[j]){
maxDp = Math.max(maxDp, dp[j]);
}
}
dp[i] = maxDp+1;
if(maxDp+1 > maxVal) maxVal = maxDp+1;
}
return maxVal;
}
}
'๐ป Coding Problems Solving > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] Subarray Sum Equals K (0) | 2023.07.23 |
---|---|
[BOJ 1890] ์ ํ (java) (0) | 2023.04.20 |
[LeetCode] Coin Change (0) | 2023.03.29 |
[LeetCode] Maximum Product Subarray (0) | 2023.03.28 |
[ํ๋ก๊ทธ๋๋จธ์ค] LV.2 2*n ํ์ผ๋ง (์๋ฐ java) (0) | 2023.03.15 |
์ต๊ทผ๋๊ธ