문제

풀이
LIS 설명이 잘 되어 있다.
DP 풀이 방식 : 시간 복잡도 O(N²)
- 인풋 배열의 크기 만큼 빈 배열(dy)을 만든다.
 
- 인풋 배열 i 를 순회하며 매 차례 이전 원소들 j를 검사하면서 현재 원소가 몇 번
째로 큰 원소인지 판단한다.  
dy[0] = 1;
for (int i = 1; i < n; i++) {
	
	int max = 0;
    	
	for (int j = i - 1; j >= 0; j--) {
    		
            	
		if (arr[i] > arr[j] && dy[j] > max) max = dy[j];
	}
	
	dy[i] = max + 1;
    	
	if (dy[i] > ans) ans = dy[i];
}
잡담
전체코드
DP 풀이 O(N²)
package inflearn;
import java.util.Scanner;
public class I1003 {
	static int[] dy;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		dy = new int[n];
		int[] arr = new int[n];
		for (int i = 0; i < n; i++) {
			arr[i] = sc.nextInt();
		}
		System.out.println(solution(n, arr));
	}
	static int solution(int n, int[] arr) {
		int ans = 0;
		dy[0] = 1;
		for (int i = 1; i < n; i++) {
			int max = 0;
			for (int j = i - 1; j >= 0; j--) {
				if (arr[i] > arr[j] && dy[j] > max) max = dy[j];
			}
			dy[i] = max + 1;
			if (dy[i] > ans) ans = dy[i];
		}
		return ans;
	}
}