다이나믹 프로그래밍을 사용했다.
같은 날 푼 문제중에 이와 90% 똑같은 문제가 있어서 금방 풀 수 있었다. 그 문제와 풀이 방법이 흡사하므로 여기서는 문제 풀이 방법을 자세하게 적지는 않겠다.
그 문제를 푼 풀이는 https://velog.io/@anwlro0212/백준-11055-가장-큰-증가하는-부분-수열JAVA 이다.
이 문제는 거의 40분 가까이 걸렸었다.
시간복잡도는 이중 for문으로 O(n^2) 이 걸린다.
import java.io.*;
import java.util.*;
public class Main {
static StringBuilder sb=new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n=Integer.parseInt(br.readLine());
int dp[]=new int[n+1];
int arr[]=new int[n+1];
st=new StringTokenizer(br.readLine());
for(int i=1;i<arr.length;i++)
arr[i]=Integer.parseInt(st.nextToken());
Arrays.fill(dp,1);
for(int i=1;i<dp.length;i++) {
for(int j=i+1;j<dp.length;j++) {
if(arr[i]>arr[j])
dp[j]=Math.max(dp[i]+1,dp[j]);
}
}
int max=0;
for(int i=1;i<dp.length;i++)
max=Math.max(max,dp[i]);
System.out.println(max);
}
}
비슷한 문제를 풀었는데 시간이 짧게 나온 것으로 보아서 이 유형에 어느정도는 익숙해진 것 같다.
하루에 백준 1문제 이상 푸는 것을 목표로 하고있다.
https://solved.ac/profile/anwlro0212