문제
풀이
부분수열은 자기자신의 값도 포함되기 때문에 최소 길이 값은 1로 초기화한다. 그리고 첫번째 값부터 반복문을 통해 바로 이전 값과 비교해 현재값이 크다면 현재 dp[] 에서 제일큰 값의 +1를 해주고 작다면 초기화된 값을 갖도록 했다. 문제에서는 가장 긴 수열이라고 주어졋기 때문에 따로 값을 넣어주진 않았다.
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N + 1];
int[] dp = new int[N + 1];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
dp[i] = 1;
}
int max = 1;
for (int i = 1; i <= N; i++) {
for (int j = 1; j < i; j++) {
if (arr[i] > arr[j]) dp[i] = Math.max(dp[i], dp[j] + 1);
}
max = Math.max(max, dp[i]);
}
System.out.print(max);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 1924 - 2007년 (0) | 2022.07.06 |
---|---|
[Java] 백준 1912 - 연속합 (0) | 2022.06.20 |
[Java] 백준 11726 - 2×n 타일링 (0) | 2022.06.07 |
[Java] 백준 1935 - 후위표기식2 (0) | 2022.05.24 |
[Java] 백준 1406-에디터 (2) | 2022.05.16 |