PS/Programmers

프로그래머스 등굣길 Lv3 / JAVA

얍연구소장 2023. 4. 23. 00:53

https://school.programmers.co.kr/learn/courses/30/lessons/42898

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

* 최단거리 값이 아닌 최단거리 갯수를 구하는 문제이다.

* m과 n 을 배열로 계산하기 위해 바꾸어주었다.

 

> 풀이

class Solution {
    public int solution(int m, int n, int[][] puddles) {       
       int answer = 0;

       int[][] dp = new int[n+1][m+1];

       //물 웅덩이
       for(int[] x: puddles) {        	
           dp[x[1]][x[0]] = -1;
       }

       dp[1][1] = 1;
       
       /* 물 웅덩이가 있는 맵
        0 0 0 0 
        0 -1 0 0 
        0 0 0 0
       */

       for(int i = 1; i <= n; i++) {
           for(int j = 1; j <= m; j++) {
               if(dp[i][j] != -1) {

                  if(j > 1 &&  dp[i][j-1] != -1){ // 우측으로 이동
                      dp[i][j] += dp[i][j-1] % 1000000007;

                  }
                  if(i > 1 && dp[i-1][j] != -1) { // 아래로 이동
                      dp[i][j] += dp[i-1][j] % 1000000007;
                  }
               } 
           }    	   
       }

       /* 최단거리가 아닌 (4,3) 최단거리 갯수 
        1 1 1 1 
        1 -1 1 2 
        1 1 2 4        
       */
       
       answer = dp[n][m] % 1000000007;
       return answer;
    }
}