Develope Story

2019-03-21 [JAVA]백준 11053 - 가장 긴 증가하는 부분 수열

|

문제출처

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

풀이

dp => 최대 수열 개수

num 10 20 10 30 20 50
Dp 1 2 1 3 2 4
  • dp[n]은 n-1까지 수들 중 num[n]보다 작은 값에서 최대 dp+1
  • num[n]보다 작은 값이 없을 때 dp[n] = 1
  • 출력은 dp중 가장 큰 값
for (int i=2; i<=n; i++){
            for (int j=1; j<i; j++){
                if(num[i]>num[j])
                    dp[i] = Math.max(dp[i], dp[j]+1);
                else
                    dp[i] = Math.max(dp[i], 1);
            }
        }

전체소스

import java.util.Scanner;

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

        int n = sc.nextInt();
        int[] num = new int[n+1];
        int[] dp = new int[n+1];
        
        for(int i=1; i<=n;i++)
            num[i] =sc.nextInt();
        dp[1] = 1;

        for (int i=2; i<=n; i++){
            for (int j=1; j<i; j++){
                if(num[i]>num[j])
                    dp[i] = Math.max(dp[i], dp[j]+1);
                else
                    dp[i] = Math.max(dp[i], 1);
            }
        }

        int max = 0;
        for(int i=1; i<=n; i++)
            max = Math.max(max, dp[i]);

        System.out.println(max);
    }
}

Comments