728x90
[백준] 점프 (!) (1890번 JAVA) / DP
[ 접근 방법 ]
게임 판에 적혀있는 '이동 가능 거리' 를 arr 2차원 배열에 저장
해당 좌표까지 도착 할 수 있는 방법 수 를 DP 2차원 배열에 저장
좌표 (1, 1) 부터 (N, N) 까지 DP 시작 한다.
예제로 설명한다면,
[입력값]
[DP 출력]
DP의 (1,1)을 초기값으로 1로 설정한다.
(1, 1)에서 '이동 가능 거리'는 ' 2 ' 이다.
(1, 1) -> (3, 1)
(1, 1) -> (1, 3)
으로 이동 가능하다.
이와 같은 방법으로 한다면,
위와 같은 DP 출력 값이 나오게 된다.
[ JAVA 코드 ]
// 1890번 점프
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
// 0. 입출력 선언 / 초기화
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[][] arr = new int[N+1][N+1];
for(int i=1; i<=N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j=1; j<=N; j++){
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
// 좌표 별 가능한 경로 수
long[][] DP = new long[N+1][N+1];
DP[1][1] = 1;
for(int i=1; i<=N; i++){
for(int j=1; j<=N; j++){
int next = arr[i][j];
// 도착점
if (next == 0) break;
if (i + next <= N){
DP[i+next][j] += DP[i][j];
}
if (j + next <= N){
DP[i][next+j] += DP[i][j];
}
}
}
bw.write(DP[N][N] + "\n");
bw.flush();
bw.close();
br.close();
}
}
[ Rewind ]
1. 어려웠던 점
- DP 접근 방식을 고려하지 못함. (정방향이 아닌 역방향으로 도착 지점부터 출발지정까지 역방향만 고려함)
- DP 점화식을 생각하지 못함.
2. 알게 된 점
- DP에 해당 좌표까지 올 수 있는 방법 수를 저장하는 것 에 대한 방법
728x90
'백준 > DP' 카테고리의 다른 글
[백준] 점프 점프 (11060번 JAVA) / DP (0) | 2023.01.28 |
---|---|
[백준] BOJ 거리 (12026번 JAVA) / DP (0) | 2023.01.27 |
[백준] 퇴사 (!) (14501번 JAVA) / DP (0) | 2023.01.25 |
[백준] 연속합 2 (!) (1932번 JAVA) / 401 - 다이나믹 프로그래밍 1 (연습) (0) | 2023.01.21 |
[백준] 가장 긴 바이토닉 부분 수열 (!) (11054번 JAVA) / 401 - 다이나믹 프로그래밍 1 (연습) (0) | 2023.01.20 |