본문 바로가기

Development

최장 증가 부분 수열 (LIS) 알고리즘 이해 및 C# 구현

안녕하세요! 오늘의 기술 면접 지식은 동적 프로그래밍 알고리즘 중 하나인 최장 증가 부분 수열 (Longest Increasing Subsequence, LIS) 알고리즘에 관한 것입니다. 이 포스팅에서는 LIS 알고리즘의 기본 개념과 C#으로 구현한 예제 코드를 살펴봅니다.

최장 증가 부분 수열 (LIS) 알고리즘 개요

LIS 알고리즘은 주어진 수열에서 가장 긴 증가하는 부분 수열을 찾는 알고리즘입니다. 여기서 부분 수열이란 원래 수열에서 일부 원소를 삭제하여 얻을 수 있는 수열을 의미합니다.

C#을 사용한 LIS 알고리즘 구현

아래 예제 코드는 동적 프로그래밍을 사용한 LIS 알고리즘을 C#으로 구현한 것입니다.

 

public static int LongestIncreasingSubsequence(int[] nums)
{
    int n = nums.Length;
    int[] dp = new int[n];

    for (int i = 0; i < n; i++)
    {
        dp[i] = 1;
    }

    int maxLength = 1;

    for (int i = 1; i < n; i++)
    {
        for (int j = 0; j < i; j++)
        {
            if (nums[i] > nums[j])
            {
                dp[i] = Math.Max(dp[i], dp[j] + 1);
            }
        }
        maxLength = Math.Max(maxLength, dp[i]);
    }

    return maxLength;
}

 

이 코드는 주어진 배열의 길이만큼 순회하며, 현재 인덱스 i의 값보다 작은 값들의 인덱스 j에 대해 dp[i]를 갱신합니다. 배열 전체를 순회한 후 dp 배열의 최대 값을 반환하여 LIS의 길이를 찾습니다.

 

LIS 알고리즘은 동적 프로그래밍을 사용한 알고리즘 중 하나로, 기술 면접에서 종종 이와 관련된 질문이 나옵니다. 이 포스팅에서 소개한 개념과 구현 예시를 참고하여 면접에서 확실한 답변을 준비할 수 있습니다. 다음 포스팅에서 또 다른 주제로 찾아뵙겠습니다!