Algorithm/백준 알고리즘

백준_1890 점프(자바) / DP

미스터로즈 2021. 5. 8. 10:21

시간 & 메모리 제한

문제

입력 & 출력

 

DP를 이용한 문제 풀이

package com.Back;

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

public class Back_1890 {
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int N = Integer.parseInt(br.readLine());
		int[][] map = new int[N][N];
		long[][] dp = new long[N][N];
		
		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());
			}
		}
		dp[0][0]=1;
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				if(i==N-1 && j == N-1)break;
				else {
					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];
				}
			}
		}
		
		System.out.println(dp[N-1][N-1]);
	}

}

 

- 처음에는 DFS를 이용해서 문제풀이를 진행했었습니다... 잘 안풀려서 DP로 시도 했더니 쉽게 풀렸습니다.

 

- DP를 이용해서 문제 풀이를 진행했습니다... 그래서 map이라는 배열과 동시에 dp라는 배열을 만들었습니다.

 

- 이중 for문을 통해서 이동 가능한지를 dp를 통해서 체크를 해줍니다.

 

- 오른쪽으로 가는 경우와 아래로 가는 경우만 체크해 주면 되기 때문에 좀 수월하게 풀 수 있습니다.

 

- 2번 당했더니 이부분은 꼼꼼하게 잘 체크 했던거 같습니다... 바로 long형 쓰는거 잊으면 안됩니다.

2^63-1까지 표현 할수 있다는 것은 long형!