[백준] 15486번: 퇴사2
📝문제
조금은 어려웠던 문제
현재 날짜를 기준으로 최대값을 따로 저장을 해둬야되는데 그런 과정없이 dp 배열을 사용해서 틀린 답이 나왔다.
해당 날짜를 건너뛰는 경우도 있고, 언제 일을 끝내게 될 지 모르니 최대값을 따로 저장해둬야한다.
📌코드
package Baekjoon;
import java.util.*;
import java.io.*;
public class BOJ15486 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int[][] board = new int[2][n+2];
for(int i = 1; i < n+1; i++){
st = new StringTokenizer(br.readLine());
for(int j = 0; j < 2; j++){
board[j][i] = Integer.parseInt(st.nextToken());
}
}
int[] dp = new int[n+2];
/**
* dp 배열에는 해당 날짜에서 받을 수 있는 금액을 적는다
* 만약, board[_][1] = { 3, 10 }, board[_][4] = { 1, 20 } 이라면
* dp[4]은 10, dp[5]는 10 + 20 = 30이 된다.
*/
int curMax = 0;
for(int i = 1; i < n+2 ; i++){
if(curMax < dp[i]) curMax = dp[i];//최댓값 업데이트
if(i + board[0][i] > n+1) continue; //범위 밖일 때는 스킵
dp[i + board[0][i]] = Math.max(dp[i + board[0][i]], curMax + board[1][i]);
}
System.out.println(curMax);
}
}
Author And Source
이 문제에 관하여([백준] 15486번: 퇴사2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@paulus0617/boj15486
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
package Baekjoon;
import java.util.*;
import java.io.*;
public class BOJ15486 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int[][] board = new int[2][n+2];
for(int i = 1; i < n+1; i++){
st = new StringTokenizer(br.readLine());
for(int j = 0; j < 2; j++){
board[j][i] = Integer.parseInt(st.nextToken());
}
}
int[] dp = new int[n+2];
/**
* dp 배열에는 해당 날짜에서 받을 수 있는 금액을 적는다
* 만약, board[_][1] = { 3, 10 }, board[_][4] = { 1, 20 } 이라면
* dp[4]은 10, dp[5]는 10 + 20 = 30이 된다.
*/
int curMax = 0;
for(int i = 1; i < n+2 ; i++){
if(curMax < dp[i]) curMax = dp[i];//최댓값 업데이트
if(i + board[0][i] > n+1) continue; //범위 밖일 때는 스킵
dp[i + board[0][i]] = Math.max(dp[i + board[0][i]], curMax + board[1][i]);
}
System.out.println(curMax);
}
}
Author And Source
이 문제에 관하여([백준] 15486번: 퇴사2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@paulus0617/boj15486저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)