[Silver II] 점프 점프 - 11060

JYC·2024년 2월 17일

[BAEKJOON]

목록 보기
41/102

문제 링크

성능 요약

메모리: 2028 KB, 시간: 0 ms
메모리: 14428 KB, 시간: 136 ms

분류

너비 우선 탐색, 다이나믹 프로그래밍, 그래프 이론, 그래프 탐색

제출 일자

2024년 2월 17일 19:45:19

문제 설명

재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로 떨어진 칸으로 한 번에 점프할 수 있다. 예를 들어, 3번째 칸에 쓰여 있는 수가 3이면, 재환이는 4, 5, 6번 칸 중 하나로 점프할 수 있다.

재환이는 지금 미로의 가장 왼쪽 끝에 있고, 가장 오른쪽 끝으로 가려고 한다. 이때, 최소 몇 번 점프를 해야 갈 수 있는지 구하는 프로그램을 작성하시오. 만약, 가장 오른쪽 끝으로 갈 수 없는 경우에는 -1을 출력한다.

입력

첫째 줄에 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 Ai (0 ≤ Ai ≤ 100)가 주어진다.

출력

재환이가 최소 몇 번 점프를 해야 가장 오른쪽 끝 칸으로 갈 수 있는지 출력한다. 만약, 가장 오른쪽 끝으로 갈 수 없는 경우에는 -1을 출력한다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	static int[] arr = new int[1101];
	static int[] dp= new int[1101];
	public static void main(String[] args) throws IOException {
		BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		StringTokenizer st =new StringTokenizer(br.readLine());
		for(int i=1; i<=n; i++) {
			arr[i]= Integer.parseInt(st.nextToken());
			dp[i]=Integer.MAX_VALUE;
		}
		dp[1]=0;
		for(int i=1; i<=n; i++) {
			int jump=arr[i];
			for(int j=1; j<=jump; j++) {
				if(dp[i]!=Integer.MAX_VALUE) {
					dp[i+j]=Math.min(dp[i]+1, dp[i+j]);
				}
			}
		}
		if(dp[n]==Integer.MAX_VALUE) {
			System.out.println(-1);
		}
		else {
			System.out.println(dp[n]);
		}
	}
}
profile
열심히 하기 1일차

0개의 댓글