Skip to content

Commit 0ebcf58

Browse files
committed
[Silver I] Title: 점프, Time: 108 ms, Memory: 14340 KB -BaekjoonHub
1 parent 9cabc0b commit 0ebcf58

2 files changed

Lines changed: 69 additions & 0 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# [Silver I] 점프 - 1890
2+
3+
[문제 링크](https://www.acmicpc.net/problem/1890)
4+
5+
### 성능 요약
6+
7+
메모리: 14340 KB, 시간: 108 ms
8+
9+
### 분류
10+
11+
다이나믹 프로그래밍
12+
13+
### 제출 일자
14+
15+
2025년 8월 19일 17:16:55
16+
17+
### 문제 설명
18+
19+
<p>N×N 게임판에 수가 적혀져 있다. 이 게임의 목표는 가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 점프를 해서 가는 것이다.</p>
20+
21+
<p>각 칸에 적혀있는 수는 현재 칸에서 갈 수 있는 거리를 의미한다. 반드시 오른쪽이나 아래쪽으로만 이동해야 한다. 0은 더 이상 진행을 막는 종착점이며, 항상 현재 칸에 적혀있는 수만큼 오른쪽이나 아래로 가야 한다. 한 번 점프를 할 때, 방향을 바꾸면 안 된다. 즉, 한 칸에서 오른쪽으로 점프를 하거나, 아래로 점프를 하는 두 경우만 존재한다.</p>
22+
23+
<p>가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 이동할 수 있는 경로의 개수를 구하는 프로그램을 작성하시오.</p>
24+
25+
### 입력
26+
27+
<p>첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장 오른쪽 아래 칸에는 항상 0이 주어진다.</p>
28+
29+
### 출력
30+
31+
<p>가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 문제의 규칙에 맞게 갈 수 있는 경로의 개수를 출력한다. <span style="line-height:1.6em">경로의 개수는 2</span><sup style="line-height:1.6em">63</sup><span style="line-height:1.6em">-1보다 작거나 같다.</span></p>
32+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import java.util.*;
2+
import java.io.*;
3+
4+
public class Main {
5+
public static void main(String[] args) throws IOException{
6+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
StringTokenizer st = new StringTokenizer(br.readLine());
8+
int N = Integer.parseInt(st.nextToken());
9+
int[][] board = new int[N][N];
10+
long[][] dp = new long[N][N];
11+
12+
for(int i=0; i<N; i++){
13+
st = new StringTokenizer(br.readLine());
14+
for(int j=0; j<N; j++){
15+
board[i][j] = Integer.parseInt(st.nextToken());
16+
}
17+
}
18+
19+
dp[N-1][N-1] = 1;
20+
21+
for(int i=N-1; i>=0; i--){
22+
for(int j=N-1; j>=0; j--){
23+
if(i==N-1 && j==N-1) continue;
24+
25+
int jump=board[i][j];
26+
int nextRight = j+jump; //x값 이동(j변경)
27+
int nextDown = i+jump; //y값 이동(i변경)
28+
29+
if(nextRight<N) dp[i][j] += dp[i][nextRight];
30+
if(nextDown<N) dp[i][j] += dp[nextDown][j];
31+
}
32+
}
33+
System.out.println(dp[0][0]);
34+
35+
36+
}
37+
}

0 commit comments

Comments
 (0)