본문 바로가기
알고리즘/백준

[JAVA]백준_11053_가장 긴 증가하는 부분 수열

by 박 현 황 2021. 3. 25.

문제링크

https://www.acmicpc.net/problem/11053

 

11053번: 가장 긴 증가하는 부분 수열

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이

www.acmicpc.net

 

 

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int[] arr = new int[N]; // 원소들 저장
		int[] LIS = new int[N]; // 각 원소를 마지막에 세웠을 때의 최장 길이

		for (int i = 0; i < N; i++) {
			arr[i] = sc.nextInt();
		}
		int max = 0;
		for (int i = 0; i < N; i++) {
			LIS[i] = 1;// 자기 혼자 세웠을 때의 길이로 초기화
			for (int j = 0; j < i; j++) {// 맨 앞부터 자신의 직전 원소들과 비교
				if (arr[j] < arr[i] && LIS[i] < LIS[j] + 1) {
					LIS[i] = LIS[j] + 1;
				}
			}
			if (max<LIS[i]) max = LIS[i];
		}
		//System.out.println(Arrays.toString(LIS));
		System.out.println(max);
	}
}