알고리즘/백준
백준 11053 (가장 긴 증가하는 부분 수열) - java
김다미김태리신시아
2023. 1. 6. 01:49
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 배열의 값들을 전부 1로 초기화해준다. 그 이유는 해당 값으로만 이루어진 수열의 길이가 1이기 때문이다
2부터 n 즉 2번째 수부터 끝까지를 검사해가며 1부터 n-1까지의 수로 시작하는 부분 수열의 최대 길이를 갱신해준다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int n= 0;
static int[] arr = new int[1001];
static int[] dp = new int[1001];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine()," ");
for(int i=1;i<=n;i++)
{
arr[i] = Integer.parseInt(st.nextToken());
dp[i] =1; // 모든 좌표의 값을 1로 초기화 (해당 수로만 이루어진 부분 수열의 길이)
}
int max = 1;
for(int i=2;i<=n;i++)
{
for(int j=1;j<i;j++) {
if (arr[j] < arr[i]&&dp[i]<dp[j]+1) // 증가하는 수열이며 dp[i] 가 갱신 될 수 있는 경우
{
dp[i] = dp[j]+1; // 길이를 증가
max = Math.max(max,dp[i]); // 최댓값 갱신
}
}
}
System.out.println(max);
br.close();
}
}