백준
백준 11722 가장 긴 감소하는 부분 수열(Java)
Park DJ
2023. 2. 9. 03:21
https://www.acmicpc.net/problem/11722
11722번: 가장 긴 감소하는 부분 수열
수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10}
www.acmicpc.net
해석 및 팁
이 문제는 백준 11053 가장 긴 증가하는 부분 수열 문제와 유사한 문제이며 다이내믹프로그래밍을 이용하면 됩니다. dp[] 배열 에는 각 원소에서 가장 긴 감소 수열의 길이를 넣고 현재 값이 이전 값보다 작으면 +1 해주면 됩니다.
Java 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int max = -1;
int n = sc.nextInt();
int arr[] = new int[n];
int dp[] = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
dp[i] = 1;
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < i; j++) {
if(arr[j] > arr[i] && dp[j] >= dp[i]) dp[i] = dp[j] + 1;
}
}
for(int i = 0; i < n; i++) max = Math.max(max, dp[i]);
System.out.println(max);
}
}