👀 문제
https://www.acmicpc.net/problem/11053
👊 도전
1. 설계
- dp[i]=array[i]를 가장 큰 원소로 하는 가장 긴 증가하는 부분의 수열의 길이로 한다.
2. 구현 (성공 코드)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.Arrays;
import java.util.Scanner;
/**
*
* @author HEESOO
*
*/
public class Main {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int[] array=new int[n];
int answer=0;
for(int i=0;i<n;i++){
array[i]=input.nextInt();
}
int[] dp=new int[n];
Arrays.fill(dp, 1);
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(array[i]>array[j]&&dp[j]>=dp[i]){
dp[i]=dp[j]+1;
}
}
}
Arrays.sort(dp);
System.out.println(dp[n-1]);
}
}
3. 결과
🤟 성공 🤟
4. 설명
- DP를 이용한다.
- i를 기준으로 j로 0부터 i까지 확인하며, i가 제일 큰 값이 될 수 있도록 i보다 작은 j를 찾고, dp[j]가 dp[i]보다 같거나 크다면, dp[i]는 dp[j]+1의 값을 가진다.
- Arrays.sort()로 정렬하여 가장 큰 값을 리턴한다.
👏 해결 완료!
참고
- 챕터3-12. DP 문제 풀이3 - (1) 백준 No.11053 : 가장 긴 증가하는 부분 수열 https://ldgeao99.tistory.com/entry/%EC%B1%95%ED%84%B03-11-DP-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B43-1-%EB%B0%B1%EC%A4%80-No2156-%ED%8F%AC
- [백준/11053] 가장 긴 증가하는 부분 수열 (Java/코드) https://yuhe-dogspaw.tistory.com/76