๋ฌธ์ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/42898
๋ฌธ์ ์ค๋ช
ํด๋น ์ขํ์ ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ์ฅํ๋ dp ํ ์ด๋ธ์ ๋ง๋ญ๋๋ค.
์ด๋์ ์ค๋ฅธ์ชฝ, ์๋๋ก๋ง ๊ฐ๋ฅํ๋ฏ๋ก (x, y)์ ๋๋ฌํ๋ ๋ฐฉ๋ฒ์ (x - 1, y)์์ ์ค๊ฑฐ๋ (x, y - 1)์์ ์ค๋ 2๊ฐ์ง์ ๋๋ค.
๋ฌธ์ ์์๋ mxn ํฌ๊ธฐ์ ๋ฐฐ์ด์ด๋ผ๊ณ ํ์ง๋ง ๋ฆฌ์คํธ ์ธ๋ฑ์ฑ์ ํธ์์ n์ ํ, m์ ์ด๋ก ์๊ฐํ์ต๋๋ค.
- (n + 1) X (m + 1) ํฌ๊ธฐ์ dp ํ ์ด๋ธ์ ๋ง๋ค๊ณ 0์ผ๋ก ์ด๊ธฐํ
- dp[1][1]์ 1 ์ ์ฅ (์ง ์ขํ)
- puddles ์ขํ๋ฅผ dp ํ ์ด๋ธ์ -1๋ก ์ ์ฅ
- ๋ฌผ์ ์ ๊ธฐ์ง ์์ ์ขํ์ ๋ํด
1) ์์ชฝ์์ ์ค๋ ๋ฐฉ๋ฒ (x - 1, y)์ ๊ฐ์ง์์
2) ์ผ์ชฝ์์ ์ค๋ ๋ฐฉ๋ฒ (x, y - 1)์ ๊ฐ์ง์๋ฅผ ๋ํจ - dp[n][m]์ ๊ณ์ฐํ ๋๊น์ง 4๋ฒ ๊ณผ์ ๋ฐ๋ณต
- dp[n][m]์ 1000000007๋ก ๋๋ ๋๋จธ์ง ๋ฐํ
์์ค์ฝ๋
def solution(m, n, puddles):
dp = [[0] * (m + 1) for _ in range(n + 1)]
dp[1][1] = 1
# ๋ฌผ์ ์ ๊ธด ๊ณณ ํ์
for (y, x) in puddles:
dp[x][y] = -1
for x in range(1, n + 1):
for y in range(1, m + 1):
if dp[x][y] != -1: # ๋ฌผ์ ์ ๊ธฐ์ง ์์ ๊ณณ
# ์์ชฝ์์ ์ค๋ ๋ฐฉ๋ฒ
if x > 1 and dp[x - 1][y] != -1: dp[x][y] += dp[x - 1][y]
# ์ผ์ชฝ์์ ์ค๋ ๋ฐฉ๋ฒ
if y > 1 and dp[x][y - 1] != -1: dp[x][y] += dp[x][y - 1]
return dp[n][m] % 1000000007
728x90
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ๋น๋ฐ์ง๋(2018 ์นด์นด์ค ์ฝ๋ฉํ ์คํธ 1์ฐจ) (0) | 2021.04.09 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ๋๋์ง (0) | 2021.04.06 |
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ์ ์ ์ผ๊ฐํ (0) | 2021.04.06 |
[ํ๋ก๊ทธ๋๋จธ์ค / Python] N์ผ๋ก ํํ (0) | 2021.04.06 |
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ์์ (0) | 2021.04.05 |