본문 바로가기
알고리즘

[Java] 백준 1890번 점프

by 태풍사랑 2020. 5. 19.

https://www.acmicpc.net/problem/1890

 

1890번: 점프

문제 N×N 게임판에 수가 적혀져 있다. 이 게임의 목표는 가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 점프를 해서 가는 것이다. 각 칸에 적혀있는 수는 현재 칸에서 갈 수 있는 거��

www.acmicpc.net

풀이


(나의 생각)

1. 칸의 개수 입력받기

2. for 문으로 배열의 값 입력받기

3. 시작점은 배열의 첫번째 값으로 잡아두고 시작

4. 오른쪽, 아래의 경우를 비교할 필요없이 모두 따져야함(모든 경우의 수를 구해야되기 때문)

5. 경우의 수의 경우 int 값으로 저장해서 총 개수를 구한다? 

 

5번의 경우 int값으로 모든 경우의 수를 저장할 필요없이 dp배열에 값을 저장해 마지막 값을 출력하면된다.

 


각 칸의 기준으로 갈 수 있는 거리를 통해 갈 수 있는 경로의 개수를 업데이트!

int dist = map[i][j];
int down = dist + i;
int right = dist + j;
	 
if (down < n) { //칸수보다는 작아야 칸 안에서 돌 수 있기 때문에
	dp[down][j] += dp[i][j];
}
	 
if (right < n) {
	dp[i][right] += dp[i][j];
}

 

예외로 걸러도 되는 부분

① dp[i][j] = 0 인 경우

② 마지막 도착지점인 경우

dp[i][j] == 0 || (i == n - 1 && j == n - 1

 

코드


public class algo_1890_dp {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[][] map = new int[101][101];
	    long[][] dp = new long[101][101]; //경로의 개수는 263-1보다 작거나 같다. => long 사용
	    int n = sc.nextInt();
	 
	    dp[0][0] = 1; //기본값 설정
	 
	    for (int i = 0; i < n; i++) {
	        for (int j = 0; j < n; j++) {
	            map[i][j] = sc.nextInt();
	        }
	    }
	 
	    for (int i = 0; i < n; i++) {
	        for (int j = 0; j < n; j++) {
	        	//거르는 경우 : dp[i][j] == 0 , 마지막 도착지점인 경우
	            if (dp[i][j] == 0 || (i == n - 1 && j == n - 1)) {
	                continue;
	            }
	 
	            int dist = map[i][j];
	            int down = dist + i;
	            int right = dist + j;
	 
	            if (down < n) { //칸수보다는 작아야 칸 안에서 돌 수 있기 때문에
	                dp[down][j] += dp[i][j];
	            }
	 
	            if (right < n) {
	                dp[i][right] += dp[i][j];
	            }
	        }
	    }
	    //dp..출력..
	    System.out.println(dp[n - 1][n - 1]);
	}
}

'알고리즘' 카테고리의 다른 글

알고리즘 성능 평가  (0) 2021.07.19
[Java] 백준 1026번 보물  (0) 2020.05.20
유클리드 호제법  (0) 2020.05.17
[Java] 백준 2609번 최대공약수와 최소공배수  (0) 2020.05.17
[Java] 백준 3036번 링  (0) 2020.05.17

댓글