Algorithm/백준
백준 11060번 : 점프 점프(Java)
skyey94
2021. 8. 4. 23:07
https://www.acmicpc.net/problem/11060
11060번: 점프 점프
재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로
www.acmicpc.net
[풀이]
이전 값을 저장할 dp 배열과 입력 값을 저장할 arr 배열을 만들었다. 다음 위치로 점프할 수 있는 거리는 0~arr[i]이다. 그러므로, for 반복문을 돌면서 최소값을 dp 배열에 저장하면 된다.
(주의해야할 부분)
다음 위치로 점프할 수 있는 거리는 최소 0부터 arr[i] 까지이다. 그러므로 이 부분에 해당하는 인덱스를 주의해서 풀어야 한다.
[코드]
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
int[] arr = new int[N];
int[] dp = new int[N];
Arrays.fill(dp, -1);
String line = bf.readLine();
StringTokenizer st = new StringTokenizer(line, " ");
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
dp[0] = 0;
for (int i = 0; i < N - 1; i++) {
if (dp[i] == -1) {
continue;
}
for (int j = 1; j <= arr[i]; j++) {
if (i + j < N) {
if (dp[i + j] == -1 || dp[i + j] > dp[i] + 1) {
dp[i + j] = dp[i] + 1;
}
}
}
}
System.out.println(dp[N - 1]);
}
}