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;
    }
}
  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ์— ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ ํ•˜๊ธฐ