1. 문제
2. 문제 풀이
dp 배열을 먼저 초기화 하는데, 0행과 0열에 물웅덩이가 있으면 그 다음 지역으로는 갈 수 없으므로 0으로 초기화 된 값을 남겨둔다. 그리고 물웅덩이가 없을때가지 1로 초기화를 해준다. dp 배열을 채울때 물웅덩이가 있으면 0으로 바꿔주고, 나머지 경우는 코드를 참고하면 쉽게 이해할 수 있다.
class Solution {
private static int dp[][];
public static void calculateDp(int m, int n){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(i == 0 && j == 0){
dp[i][j] = 0;
} else if(dp[i][j] == -1){
dp[i][j] = 0;
} else if(i != 0 && j != 0){
dp[i][j] = (dp[i-1][j] + dp[i][j-1]) % 1000000007;
}
}
}
}
public static void initDp(int m, int n, int[][] puddles){
//물웅덩이 초기화
for(int i=0;i<puddles.length;i++){
dp[puddles[i][1]-1][puddles[i][0]-1] = -1;
}
//0행 초기화
for(int i=0;i<m;i++){
if(dp[0][i] != -1)
dp[0][i] = 1;
else {
break;
}
}
//0열 초기화
for(int i=0;i<n;i++){
if(dp[i][0] != -1)
dp[i][0] = 1;
else {
break;
}
}
}
public static int solution(int m, int n, int[][] puddles) {
dp = new int[n][m];
initDp(m,n,puddles);
calculateDp(m,n);
int answer = dp[n-1][m-1];
return answer;
}
public static void main(String[] args) throws Exception{
int m = 4;
int n = 3;
int[][] puddles = {{2,2}};
solution(m,n,puddles);
}
}
'Algorithm' 카테고리의 다른 글
[알고리즘] 프로그래머스 - 구명보트(탐욕법) (0) | 2020.10.26 |
---|---|
[알고리즘] 프로그래머스 - 체육복 (탐욕법) (0) | 2020.10.10 |
[알고리즘] 프로그래머스 - 정수 삼각형 (동적 계획법) (0) | 2020.10.06 |
[알고리즘] 프로그래머스 - 더 맵게(힙) (0) | 2020.08.18 |
[알고리즘] 프로그래머스 - 디스크 컨트롤러(힙) (0) | 2020.08.18 |