Algorithm
백준_퇴사_14501
Young_J
2020. 12. 20. 17:59
//알고리즘
1. dp(다이나믹 프로그래밍)
2. dp Table 생성
3. 퇴사일을 기준으로 하루씩 줄여가면서 최대값을 갱신
4. 1일차까지의 최대값을 계산한 후 dp[1] 출력
더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 퇴사_14501 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] T = new int[N + 1];
int[] P = new int[N + 1];
int[] dp = new int[N + 2];
for (int i = 1; i <= N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
T[i] = Integer.parseInt(st.nextToken());
P[i] = Integer.parseInt(st.nextToken());
}
// 알고리즘
for (int i = N; i >= 1; i--) {
if (i + T[i] > N + 1) {
dp[i] = dp[i + 1];
} else {
if (P[i] + dp[i + T[i]] > dp[i + 1])
dp[i] = P[i] + dp[i + T[i]];
else
dp[i] = dp[i + 1];
}
}
System.out.println(dp[1]);
}
}
※ dp를 공부하기 전 여러번 시도해봤지만 못 풀었던 문제
dp 문제를 여러개 풀어보니까 이제 규칙이 보이기 시작해서 풀었다.
dp가 코드는 짧아도 생각하는데 시간이 걸려 다른 탐색문제 보다 훨씬 오래 걸린다. 조금 더 공부를 해봐야 할거같다.