30분 정도 걸렸다. 점화식을 유도해내는게 쉽지 않았다. 아직 DP 유형이 많이 어색하다. 그래프 이론 문제는 골드 문제여도 어렵지 않게 느껴지는데 그리디 알고리즘이나 DP 유형은 아직 많이 부족하다.
DP 유형이다. 처음부터 문제의 알고리즘의 유형을 알고 풀었다.
그리고 티어는 실버 3의 수준이다.
가장 고민한 부분 : 점화식은 무엇일까?
시간복잡도는 for문이 1번 도므로 o(n) 일 것이다.
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb=new StringBuilder();
int n=Integer.parseInt(br.readLine());
int dp[]=new int[10000];
int cost[]=new int[n+1];
int pay[]=new int[n+1];
for(int i=1;i<=n;i++) {
st=new StringTokenizer(br.readLine());
int a=Integer.parseInt(st.nextToken());
int b=Integer.parseInt(st.nextToken());
cost[i]=a;
pay[i]=b;
}
for(int i=1;i<pay.length;i++) {
int price=cost[i];
dp[i]=Math.max(dp[i], dp[i-1]);
dp[i+price-1] =Math.max(dp[i+price-1], dp[i-1]+pay[i]);
}
System.out.println(dp[n]);
}
}
1줄 요약: dp 유형이 너무 부족하다.
이번에 모 코딩테스트를 본적이 있었는데 가장 어려웠었던 문제로 플로이드-워셜 알고리즘과 DP를 섞은 혼종이 나왔었다. 그래프 이론은 개인적으로 가장 자신있는 분야였기 때문에 문제를 보자마자 플로이드-워셜 알고리즘이 떠올랐고, 그 문제에서 DP를 요구하는 것도 알았으나 DP 를 잘 못해서 풀 수 없었다고 ....
DP 유형을 게을리 하지 말자.
하루에 백준 1문제 이상 푸는 것을 목표로 하고 있다.
https://solved.ac/profile/anwlro0212