다이나믹 프로그래밍을 사용했다.
애초에 DP 카테고리를 고르고 와서 DP 문제라는 건 알았다. 그리고 n이 1000까지니까 이 문제는 O(n^2) 의 알고리즘으로 해결하려고 했다. 그렇게 되면 1,000,000 이 나오니 0.01초에 해당하여 시간복잡도는 널널할 것으로 생각했다. 하지만 점화식을 유도해내는 데에서 많은 시간을 소모했다.
결국 39분의 시간만에 문제를 해결했다.
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());
for(int i=1;i<dp.length;i++) {
dp[i]=Math.max(dp[i],arr[i]);
for(int j=i+1;j<dp.length;j++) {
if(arr[j]>arr[i])
dp[j]=Math.max(dp[i]+arr[j],dp[j]);
}
}
int max=0;
for(int i=1;i<dp.length;i++) {
max=Math.max(dp[i],max);
}
System.out.println(max);
}
}
역시 dp 유형이 약해서 시간이 오래걸렸다.
시간이 오래 걸리더라도 혼자 점화식을 유도해 보도록 하자.
섣불리 답지에 먼저 접근하려고 하지 말자.
그리고 우선 예제의 테스트케이스라도 완벽하게 통과해내는 숏코딩 등 검증을 마치고 진짜 코딩을 시작하자. 무작정 코딩을 하고 시작했어서 중간중간 아예 다른 길로 샜었다.
하루에 백준 1문제 이상 푸는 것을 목표로 하고있다.
https://solved.ac/profile/anwlro0212