알고리즘

백준 10164번 격자상의 경로 (JAVA)

박카스마시며코딩 2021. 12. 8. 16:52

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

 

10164번: 격자상의 경로

입력의 첫째 줄에는 격자의 행의 수와 열의 수를 나타내는 두 정수 N과 M(1 ≤ N, M ≤ 15), 그리고 ○로 표시된 칸의 번호를 나타내는 정수 K(K=0 또는 1 < K < N×M)가 차례로 주어지며, 각 값은 공백으

www.acmicpc.net

 

저는 중복제거를 위해 DP를 이용해 접근하였습니다. 

또한 입력의 세번째 인자 값을 확인하여 배열에 순차적으로 넣지 않고 수학적으로 접근하여 행과 열을 구하였습니다.

 

 

package BOJ;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.function.Function;

public class BOJ_10164 {
    static int n,m;
    static int dp[][];
    static int py =0,px =0;
    static int dy[] = {0,1};
    static int dx[] = {1,0};
    static int dfs(int sy, int sx ,int ey, int ex){
        if(sy == ey && sx == ex){
            return 1;
        }
        if(dp[sy][sx] != 0){
            return dp[sy][sx];
        }else{
            int result = 0;
            for(int i = 0 ; i < 2; i++){
                int ny = sy + dy[i];
                int nx = sx + dx[i];
                if(nx >= 0 && nx < m && ny >= 0 && ny < n){
                    result += dfs(ny,nx,ey,ex);
                }
            }
            return result;
        }
    }
    public static void main(String[] args) throws Exception {
        BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        Function<String,Integer> stoi = Integer::parseInt;
        n = stoi.apply(st.nextToken());
        m = stoi.apply(st.nextToken());
        dp = new int[n][m];
        int num = stoi.apply(st.nextToken());
        if(num != 0){
            py = (num - 1) / m;
            px = (num - 1) % m;
//            System.out.println(py +" "+px);
        }
//        System.out.println(dfs(0,0,py,px));
//        System.out.println(dfs(py,px,n-1,m-1));
        System.out.println(dfs(0,0,py,px) * dfs(py,px,n-1,m-1));
    }
}

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

백준 2259번 수열 (JAVA)  (0) 2021.12.11
ALGOSPOT - BOARDCOVER(java)  (0) 2021.12.10
백준 16947번 서울 지하철 2호선 (JAVA)  (0) 2021.12.07
백준 1874번 스택 수열 (JAVA)  (0) 2021.12.06
백준 2617번 침투 (JAVA)  (0) 2021.12.05