• Home
  • About
    • KKsDev photo

      KKsDev

      게임 프로그래머를 목표로 Unity, C#을 공부하고 있습니다.

    • Learn More
    • Email
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects

내일배움캠프 27일차 TIL

23 Aug 2023

Reading time ~1 minute

오늘 배운 내용

  1. 5주차 숙제 - leetcode 300 Longest Increasing Subsequence

  2. 알고리즘 - DP

nbcbanner

leetcode 300 Longest Increasing Subsequence

이 문제도 오래 고민하다가 결국 풀지 못했는데 DP를 사용해야 된다는 생각 자체를 떠올리지 못했다.

쉬운문제 였는데 알고리즘 문제를 2달 정도 쉬니까 아예 백지화 되버린거 같아서 개념부터 다시 정리를 하려고한다.

 public class Solution
    {
        static int maxLength = 0;
        public int LengthOfLIS(int[] nums)
        {
            int[] dp = new int[nums.Length];
            dp[0] = 1;
            int maxLength = 1;

            for (int i =0; i< nums.Length; i++)
            {
                int maxval = 0;
                for(int j = 0; j < i; j++)
                {
                    if (nums[i] > nums[j])
                    {
                        maxval = Math.Max(maxval, dp[j]);
                        // 0 부터 이번에 새로들어온 i 까지 i와 비교
                        // 만약 새로 들어온 i 가 j보다 크다면
                        // j까지의 최장수열에서 + 1된것이 이번 최장수열임
                    }
                    // 이번 최장수열은?
                    dp[i] = maxval + 1;
                    // 지금 까지의 최장수열은?
                    maxLength = Math.Max(maxLength, dp[i]);

                }
            }
            return maxLength;
        }

        
    }

이번 수의 최장수열은 앞의 수들 중에서 이번 수보다 작은 수의 최장수열중 가장 큰값에서 +1을 한 값이므로 DP를 사용한다.



알고리즘 - DP

알고리즘들에 관한 내용들을 한번씩 정리해 보려고 한다.

이번에 문제를 풀면서 DP를 제대로 생각하지 못했기 때문에 DP에 관한 내용을 정리했다.

DP는 문제를 분할해서 해결하는 분할정복의 일종으로 분할정복과 다른점은

작은 문제들의 결과가 반복해서 필요하고 이를 위해서 Memoization을 통해서 결과를 저장한다.

정리 : Algorithm - DP

nbcthumbnail



TIL내일배움캠프스파르타 Share Tweet +1