코테 공부

[DP] 보행자 천국(프로그래머스)

DaEun_ 2023. 4. 6. 13:18

https://school.programmers.co.kr/learn/courses/30/lessons/1832?language=java# 

 

프로그래머스

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

programmers.co.kr

 

 

1. DP값을 갱신할 때마다 %MOD 해주기 

2. dp[ ][ ][ 0: 오른쪽 / 1: 아래쪽 ]

 

import java.util.*;

 //프로그래머스
public class Solution_보행자천국{

    static int MOD = 20170805;
    static int[] dx={0,1}; //[0]은 오른쪽, [1]: 아래
    static int[] dy={1,0};
    static Queue<int[]> q;
    static int[][][] dp;

    public static void main(String[] args) {
    
    	int m=3; 
    	int n=6;
    	
    	int[][] cityMap= {{3,2,0,0,0,2},{0,0,2,0,1,0},{1,0,0,2,2,0}};
    	int answer=solution(m,n,cityMap);
    	System.out.println(answer);
    
    }
    

    public static int solution(int m, int n, int[][] cityMap) {
        int answer = 0;

        q=new LinkedList<>();
        dp=new int[m][n][2]; 

        for(int i=0;i<n;i++) { 
            if(cityMap[0][i]==1) break;
            dp[0][i][0]=1;
        }

        for(int i=0;i<m;i++) {
            if(cityMap[i][0]==1) break;
            dp[i][0][1]=1;
        }


        for(int i=1;i<m;i++) {
            for(int j=1;j<n;j++) {
                if(cityMap[i][j]==1) {
                    continue;
                }
                if(cityMap[i-1][j]==2) { //위쪽 값이 2이라면
                    if(dp[i-1][j][1]>0) {
                        dp[i][j][1]=(dp[i][j][1]+dp[i-1][j][1])%MOD;
                    }
                }
                else { //위쪽 값이 2가 아니라면
                    dp[i][j][1]=(dp[i][j][1]+dp[i-1][j][1]+dp[i-1][j][0])%MOD;
                }

                if(cityMap[i][j-1]==2) {//왼쪽 값이 2라면
                    if(dp[i][j-1][0]>0) 
                        dp[i][j][0]=(dp[i][j][0]+dp[i][j-1][0])%MOD;
                }
                else {//왼쪽 값이 2가 아니라면 
                    dp[i][j][0]=(dp[i][j][0]+dp[i][j-1][1]+dp[i][j-1][0])%MOD;
                }

            }
        }

        answer=(dp[m-1][n-1][0]+dp[m-1][n-1][1])%MOD;
       return answer;
        }

}