geeksforgeeks.org

Longest Increasing Subsequence / geeksforgeeks.org

건이두 2019. 12. 24. 09:23
728x90

어떤 리스트가 있다고 할 때, 그 리스트에서, 값이 상승하는 순서로, 가장 긴 리스트를 찾는 문제입니다.

5 8 3 7 9 1 이 주어졌다고 하면,

5, 7, 9 이렇게 3이 Longest Increasing Subsequence 가 됩니다.

Box stacking문제를 풀기전에 미리 풀어 봤더라면, 좋았을 문제입니다. DP의 Memoization을 공부할 수 있는 좋은 문제입니다.

Longest Increasing Subsequence 문제 링크
Longest Increasing Subsequence 문제 해설
문제 푼 자바 소스

 import java.util.Scanner;

public class GFG {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();

        while(T-->0) {
            int N = sc.nextInt();
            int[] a = new int[N];

            for(int i=0; i<N; ++i) {
                a[i] = sc.nextInt();
            }

            int r = LIS(a, N);
            System.out.println(r);
        }
    }

    public static int LIS(int[] a, int N) {
        int[] lis = new int[N];

        for(int i=0; i<N; ++i) {
            lis[i] = 1;
            int maxLisLTi = 0;
            for(int j=0; j<i; ++j) {
                if(a[j] < a[i]) {
                    maxLisLTi = Math.max(maxLisLTi, lis[j]);
                }
            }

            lis[i] += maxLisLTi;
        }

        int r = lis[0];
        for(int i=0; i<N; ++i)
            r = Math.max(r, lis[i]);

        return r;
    }
}
728x90