[알고리즘][DP] 최장 증가 부분 수열(LIS)

2025. 1. 24. 20:07·자료구조와 알고리즘/알고리즘

1. 개념

1.1. 정의

부분 수열

  • 주어진 수열 중 일부를 뽑아 새로 만든 수열
  • 뽑아서 새로 만들더라도 전후 관계 순서는 유지

 

최장 증가 부분 수열(Longest  Increasing Sequence; LIS)

  • 부분 수열의 원소 중 오름차순을 유지하면서도 길이가 가장 긴 수열

2. 구현

핵심 아이디어

  • 전체 수열의 LIS 길이 == 각 숫자로 끝나는 LIS 길이 중 최댓값 구하기
  • i번째 원소의 LIS 는 i번째 원소보다 작은 i-n번째 원소들의 LIS 값 중 최댓값에 + 1
  • 모든 원소는 자기 자신을 증가 부분 수열로 가지고 있기 때문에 dp[i] = 1 로 초기화

 

 

   static int solution(int N, int[] sequence) {

        int[] dp = new int[N + 1]; // dp[i] : i번째 원소를 끝으로하는 LCS 길이

        int answer = 1;

        for (int i = 1; i <= N; i++){
            dp[i] = 1; // 최소 길이는 1
            for (int j = 1; j < i; j++){
                if (sequence[i] > sequence[j]) {
                    dp[i] = Math.max(dp[i], dp[j] + 1); // 이전 값 중 최장 길이 갱신
                    answer = Math.max(answer, dp[i]);
                }
            }
        }

        return answer;
    }

 

3. 활용

 

3.1. 가장 긴 바이토닉 수열 : 백준 11054

최장 증가 부분 수열과 최장 감소 부분 수열을 이용한 문제

 

최장 감소 부분 수열(Longest Decreasing Sequence; LDS)은 최장 증가 부분 수열을 역으로 진행하여 산출

 

3.2. 전깃줄 : 백준 2565

LIS 를 어떤 방식으로 활용 가능한지 인사이트를 제공해주는 문제.

 

4. 참고자료

 

위키백과 

 

코딩테스트 합격자 되기 : 파이썬 편

'자료구조와 알고리즘 > 알고리즘' 카테고리의 다른 글

[알고리즘] 위상 정렬(Topological Sorting)  (0) 2025.01.02
[알고리즘] 유니온 파인드(Union Find)  (0) 2024.12.30
[알고리즘] [DP] 누적합(Prefix Sum)  (1) 2024.10.17
'자료구조와 알고리즘/알고리즘' 카테고리의 다른 글
  • [알고리즘] 위상 정렬(Topological Sorting)
  • [알고리즘] 유니온 파인드(Union Find)
  • [알고리즘] [DP] 누적합(Prefix Sum)
프린이8549
프린이8549
임고 준비생에서 개발자로 전직하기
  • 프린이8549
    새싹 개발자의 성장 일지
    프린이8549
  • 전체
    오늘
    어제
    • 분류 전체보기 (40)
      • SQL 응용 (0)
        • SQL (0)
      • 프로그래밍 언어 활용 (15)
        • JAVA (11)
        • JavaScript (1)
        • SPRING (3)
      • 프로젝트 개발 기록 (3)
        • GORANG (0)
        • EWMS (0)
        • MKG (0)
      • 코딩테스트 (9)
        • Java (9)
        • SQL (0)
      • 자료구조와 알고리즘 (12)
        • 자료구조 (8)
        • 알고리즘 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    해시테이블
    해시함수
    코딩테스트 #알고리즘 #자바 #lis #최장증가부분수열
    해시맵
    II
    자료구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
프린이8549
[알고리즘][DP] 최장 증가 부분 수열(LIS)
상단으로

티스토리툴바