1. 문제
https://www.acmicpc.net/problem/1890
1890번: 점프
첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장
www.acmicpc.net
2. 풀이 과정
처음엔 DFS로 모든 경로를 처음부터 끝까지 탐색하도록 했고, 시간 초과가 났다.
아래 그림과 유사하게, 출발점에서 도달할 수 있는 좌표에 +1을 해나가며 값을 업데이트하고 결과는 (N, N)의 값을 출력해주면 된다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[][] map;
static long[][] dp;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
map = new int[N][N];
dp = new long[N][N];
dp[0][0] = 1;
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for(int j = 0; j < N; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
solve();
System.out.println(dp[N-1][N-1]);
}
public static void solve() {
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
if(map[i][j] == 0){ continue;}
int right = j + map[i][j];
int down = i + map[i][j];
if(right < N){
dp[i][right] += dp[i][j];
}
if(down < N){
dp[down][j] += dp[i][j];
}
}
}
}
}
결과
'코딩문제풀이 > Baekjoon' 카테고리의 다른 글
[Java] 백준 1525번 : 퍼즐 (0) | 2023.01.24 |
---|---|
[Java] 백준 11657번 : 타임머신 (0) | 2023.01.22 |
[Java] 백준 21610번 : 마법사 상어와 비바라기 (0) | 2023.01.10 |
[Java] 백준 5427번 : 불 (0) | 2023.01.10 |
[Java] 백준 16987번 : 계란으로 계란치기 (0) | 2023.01.08 |