https://programmers.co.kr/learn/courses/30/lessons/42898?language=java
๋ฌธ์
๊ณ์๋๋ ํญ์ฐ๋ก ์ผ๋ถ ์ง์ญ์ด ๋ฌผ์ ์ ๊ฒผ์ต๋๋ค. ๋ฌผ์ ์ ๊ธฐ์ง ์์ ์ง์ญ์ ํตํด ํ๊ต๋ฅผ ๊ฐ๋ ค๊ณ ํฉ๋๋ค. ์ง์์ ํ๊ต๊น์ง ๊ฐ๋ ๊ธธ์ m x n ํฌ๊ธฐ์ ๊ฒฉ์๋ชจ์์ผ๋ก ๋ํ๋ผ ์ ์์ต๋๋ค.
์๋ ๊ทธ๋ฆผ์ m = 4, n = 3 ์ธ ๊ฒฝ์ฐ์ ๋๋ค.
๊ฐ์ฅ ์ผ์ชฝ ์, ์ฆ ์ง์ด ์๋ ๊ณณ์ ์ขํ๋ (1, 1)๋ก ๋ํ๋ด๊ณ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋, ์ฆ ํ๊ต๊ฐ ์๋ ๊ณณ์ ์ขํ๋ (m, n)์ผ๋ก ๋ํ๋ ๋๋ค.
๊ฒฉ์์ ํฌ๊ธฐ m, n๊ณผ ๋ฌผ์ด ์ ๊ธด ์ง์ญ์ ์ขํ๋ฅผ ๋ด์ 2์ฐจ์ ๋ฐฐ์ด puddles์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ค๋ฅธ์ชฝ๊ณผ ์๋์ชฝ์ผ๋ก๋ง ์์ง์ฌ ์ง์์ ํ๊ต๊น์ง ๊ฐ ์ ์๋ ์ต๋จ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ 1,000,000,007๋ก ๋๋ ๋๋จธ์ง๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- ๊ฒฉ์์ ํฌ๊ธฐ m, n์ 1 ์ด์ 100 ์ดํ์ธ ์์ฐ์์
๋๋ค.
- m๊ณผ n์ด ๋ชจ๋ 1์ธ ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ๋ฌผ์ ์ ๊ธด ์ง์ญ์ 0๊ฐ ์ด์ 10๊ฐ ์ดํ์ ๋๋ค.
- ์ง๊ณผ ํ๊ต๊ฐ ๋ฌผ์ ์ ๊ธด ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
ํ์ด
์ค๋ฅธ์ชฝ ๋๋ ์๋์ชฝ์ผ๋ก๋ง ์ด๋์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, [i, 1] ๊ณผ [1, i]๋ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฒฝ๋ก์ ์๊ฐ 1์ธ๋ฐ โผ๏ธ ์ผ์ชฝ์ด ๋ฌผ์ ๋ฉ์ด๋ก ๋งํ [1, 4]๋ ๊ฐ๋ฅํ ๊ฒฝ๋ก์ ์๊ฐ 0์ด๋ค.
๊ทธ ์ธ์๋ ์ค๋ฅธ์ชฝ ์นธ์ ๊ฒฝ์ฐ์ ์ + ์์ชฝ ์นธ์ ๊ฒฝ์ฐ์ ์์ด๋ค. ๋ ๋ค ๋ฌผ ์ ๋ฉ์ด์ด๋ผ๋ฉด 0 (์ฆ, ๊ฐ ์ ์๋ค) ์ด๋ค.
์ฝ๋
public class ๋ฑ๊ตฃ๊ธธ {
static int mod = 1000000007;
public static int solution(int m, int n, int[][] puddles) {
int[][] dp = new int[n+1][m+1];
for(int[] p : puddles)
dp[p[1]][p[0]] = -1;
dp[1][1] = 1;
for(int i = 1 ; i <= n ; i++){
for(int j = 1 ; j <= m ; j++){
if(dp[i][j] == -1)
continue;
if(dp[i-1][j] > 0)
dp[i][j] += dp[i-1][j] % mod;
if(dp[i][j-1] > 0)
dp[i][j] += dp[i][j-1] % mod;
}
}
return dp[n][m] % mod;
}
public static void main(String[] args) {
int[][] puddles = {{2,2}};
System.out.println(solution(4, 3, puddles));
}
}
'์๊ณ ๋ฆฌ์ฆ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ํฉ์น ํ์ ์๊ธ (0) | 2021.09.30 |
---|---|
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ๋จ์ด ๋ณํ (0) | 2021.09.29 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ์ด์ค์ฐ์ ์์ํ (0) | 2021.09.29 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] 2 X n ํ์ผ๋ง (0) | 2021.09.28 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ๋ถ๋ ์ฌ์ฉ์ (0) | 2021.09.28 |