본문 바로가기
알고리즘/다이나믹 프로그래밍

[백준 11722] 가장 긴 감소하는 부분 수열(Java)

by justkeepgoing 2020. 12. 28.
728x90
반응형

1. 문제

www.acmicpc.net/problem/11722

 

11722번: 가장 긴 감소하는 부분 수열

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

www.acmicpc.net

2. 풀이

3. 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	        StringTokenizer st;
	        st  = new StringTokenizer(br.readLine());
	        int n = Integer.parseInt(st.nextToken());
	        int []list = new int[n];
	        int []dp = new int[n+1];
	        st  = new StringTokenizer(br.readLine());

	        for(int i =0; i<n;i++){
	            list[i]= Integer.parseInt(st.nextToken());
	        }

	        dp[0]=1;
	        for(int i =1;i<n;i++){
	            dp[i]=1;
	            for(int j=0; j<i;j++){
	                if(list[j]>list[i] && dp[i]<=dp[j]){
	                    dp[i]=dp[j]+1;
	                }
	            }
	        }
	        int max =0;
	        for(int i : dp) max= Math.max(max,i);
	        System.out.println(max);
	}
}
반응형

 

반응형