Algorithm/BaekJoon

11053. 가장 긴 증가하는 부분 수열(Java)

사랑우주인 2022. 3. 24. 02:28

문제 링크

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

 

문제 풀이

DP 문제입니다. n의 범위를 고려해서 이중 for문을 사용했습니다.

 

코드

package jason.baekjoon.problem11053;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int answer=1;

        int n = sc.nextInt();
        int[] A = new int[n];
        int[] dp = new int[n];

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

        for(int i=1;i<n;i++){

            for(int j=0;j<i;j++){
                if(A[j]<A[i]){
                    dp[i]=Math.max(dp[i], dp[j]+1);
                }
            }
            answer=Math.max(answer, dp[i]);
        }


        System.out.println(answer);
    }
}