Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

코드와이

[BAEKJOON] 1520. 내리막길 본문

acmicpc

[BAEKJOON] 1520. 내리막길

코드와이 2021. 7. 30. 18:40

 

DP(memoization)

 

문제링크

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

 

1520번: 내리막 길

첫째 줄에는 지도의 세로의 크기 M과 가로의 크기 N이 빈칸을 사이에 두고 주어진다. 이어 다음 M개 줄에 걸쳐 한 줄에 N개씩 위에서부터 차례로 각 지점의 높이가 빈 칸을 사이에 두고 주어진다.

www.acmicpc.net

 

package acmicpc.Gold4;

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

public class 내리막길 {

	static int r, c, map[][], dp[][];
	static int[] dr = {-1,1,0,0};
	static int[] dc = {0,0,-1,1};
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		r = Integer.parseInt(st.nextToken());
		c = Integer.parseInt(st.nextToken());
		
		map = new int[r+1][c+1];
		dp = new int[r+1][c+1];
		for(int i = 1 ; i <= r ; i++) {
			st = new StringTokenizer(br.readLine());
			for(int j = 1 ; j <= c ; j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
				dp[i][j] = -1;
			}
		}
		dfs(1,1);
		System.out.println(dp[1][1]);
	}
	
	public static int dfs(int y, int x) {
		
		// 도착지점 도착
		if(y == r && x == c) return 1;
		
		if(dp[y][x] != -1) return dp[y][x];
		
		dp[y][x] = 0;
		for(int d = 0 ; d < 4 ; d++) {
			int nr = y + dr[d];
			int nc = x + dc[d];
			
			if(nr > 0 && nc > 0 && nr <= r && nc <= c && map[nr][nc] < map[y][x]) {
				dp[y][x] += dfs(nr,nc);
			}
			
		}
		return dp[y][x];
		
	}
}

'acmicpc' 카테고리의 다른 글

[BAEKJOON] 2573. 빙산  (0) 2021.08.06
[BAEKJOON] 1707. 이분 그래프  (0) 2021.08.06
[BAEKJOON] 1197. 최소 스패닝 트리  (0) 2021.07.26
[BAEKJOON] 1987. 알파벳  (0) 2021.07.24
[BAEKJOON] 2580. 스도쿠  (0) 2021.07.24