전공공부
[BOJ_11060] 점프 점프 본문
설명
어떻게 보면 메모리제이션을 활용한 문제입니다. 이전의 상태 값을 가지고 다음에 진행 할 때 그 상태값을 가진 수에 대해서만 진행을 시켰으니깐요. (처음 dp를 초기화 하고 나머지를 빼는 이유) 그리고, 각 dp는 각 점프의 횟수를 나타냅니다.
코드
package BOJ.Dynamic_Programming;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_11060 {
public static void main(String[] args) throws Exception{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer tk = new StringTokenizer(in.readLine()," ");
int N = Integer.parseInt(tk.nextToken());
int[] A = new int[N];
int[] dp = new int[N];
tk = new StringTokenizer(in.readLine()," ");
for (int i = 0; i < N; i++){
A[i] = Integer.parseInt(tk.nextToken());
}
dp[0] = 1;
for (int i = 0; i < N; i++){
if(A[i] > 0 && dp[i] != 0){
for (int j = i; j < (Math.min((i + A[i] + 1), N)); j++){
if(dp[j] == 0 || dp[j] > dp[i] + 1) {
dp[j] = dp[i] + 1;
}
}
}
}
System.out.println(dp[N - 1] == 0 ? -1 : dp[N - 1] - 1);
}
}
11060번: 점프 점프
재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로
www.acmicpc.net