๐ก ์กฐ๊ฑด
- ์ง๋๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง์ฌ๊ฐํ ๋ชจ์์ด๋ฉฐ ์ฌ๋ฌ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค.
ํ ์นธ์ ํ ์ง์ ์ ๋ํ๋ด๋๋ฐ ๊ฐ ์นธ์๋ ๊ทธ ์ง์ ์ ๋์ด๊ฐ ์ฐ์ฌ ์์ผ๋ฉฐ, ๊ฐ ์ง์ ์ฌ์ด์ ์ด๋์ ์ง๋์์ ์ํ์ข์ฐ ์ด์ํ ๊ณณ๋ผ๋ฆฌ๋ง ๊ฐ๋ฅํ๋ค.
- ํ์ฌ ์ ์ผ ์ผ์ชฝ ์ ์นธ์ด ๋ํ๋ด๋ ์ง์ ์ ์๋ ์ธ์ค์ด๋ ์ ์ผ ์ค๋ฅธ์ชฝ ์๋ ์นธ์ด ๋ํ๋ด๋ ์ง์ ์ผ๋ก ๊ฐ๋ ค๊ณ ํ๋ค.
๊ทธ๋ฐ๋ฐ ๊ฐ๋ฅํ ํ์ ์ ๊ฒ ๋ค์ด๊ณ ์ถ์ด ํญ์ ๋์ด๊ฐ ๋ ๋ฎ์ ์ง์ ์ผ๋ก๋ง ์ด๋ํ์ฌ ๋ชฉํ ์ง์ ๊น์ง ๊ฐ๊ณ ์ ํ๋ค.
์์ ๊ฐ์ ์ง๋์์๋ ๋ค์๊ณผ ๊ฐ์ ์ธ ๊ฐ์ง ๊ฒฝ๋ก๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ง๋๊ฐ ์ฃผ์ด์ง ๋ ์ด์ ๊ฐ์ด ์ ์ผ ์ผ์ชฝ ์ ์ง์ ์์ ์ถ๋ฐํ์ฌ ์ ์ผ ์ค๋ฅธ์ชฝ ์๋ ์ง์ ๊น์ง
ํญ์ ๋ด๋ฆฌ๋ง๊ธธ๋ก๋ง ์ด๋ํ๋ ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- ์ฒซ์งธ ์ค์๋ ์ง๋์ ์ธ๋ก์ ํฌ๊ธฐ M๊ณผ ๊ฐ๋ก์ ํฌ๊ธฐ N์ด ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค.
์ด์ด ๋ค์ M๊ฐ ์ค์ ๊ฑธ์ณ ํ ์ค์ N๊ฐ์ฉ ์์์๋ถํฐ ์ฐจ๋ก๋ก ๊ฐ ์ง์ ์ ๋์ด๊ฐ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค.
M๊ณผ N์ ๊ฐ๊ฐ 500์ดํ์ ์์ฐ์์ด๊ณ , ๊ฐ ์ง์ ์ ๋์ด๋ 10000์ดํ์ ์์ฐ์์ด๋ค.
- ์ฒซ์งธ ์ค์ ์ด๋ ๊ฐ๋ฅํ ๊ฒฝ๋ก์ ์ H๋ฅผ ์ถ๋ ฅํ๋ค. ๋ชจ๋ ์
๋ ฅ์ ๋ํ์ฌ H๋ 10์ต ์ดํ์ ์์ด ์๋ ์ ์์ด๋ค.
- DFS, DP ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin, setrecursionlimit
setrecursionlimit(10 ** 6)
n, m = map(int, stdin.readline().split())
board = []
for _ in range(n):
board.append(list(map(int, stdin.readline().split())))
dp = [[-1] * m for _ in range(n)]
dx, dy = [1, 0, 0, -1], [0, -1, 1, 0]
def solve(x, y):
global ans
if (x, y) == (n - 1, m - 1):
return 1
if dp[x][y] != -1:
return dp[x][y]
dp[x][y] = 0
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if 0 <= nx < n and 0 <= ny < m:
if board[x][y] > board[nx][ny]:
dp[x][y] += solve(nx, ny)
return dp[x][y]
print(solve(0, 0))
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
4 5
50 45 37 32 30
35 50 40 20 25
30 30 25 17 28
27 24 22 15 10
์คํ๊ฒฐ๊ณผ
3
โจ๏ธ ๋ฌธ์ ํ์ด
- ์ ์ผ ์ค๋ฅธ์ชฝ ์๋์ง์ ์ DP[N][M] ์์, DP[N - 1][M] + DP[N][M - 1] ์ด๋ค.
- (0, 0)๋ถํฐ ์์ํ์ฌ DFS๋ก ์งํ์ ํ๋ฉด์ ๊ฐ ์ ์๋ ๊ฒฝ๋ก์ ๋ํด์ ๊ณ์ฐํ๋ค.
- DP์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ์ฅํ๋ฉด์ ์งํํ๋ฉด ๋๋๋ฐ, ๋ฌธ์ ์์ ๋์๋ฏ์ด, ์
๋ ฅ๋ฐ์ board ์์ ํ์ฌ ์์นํ ์์น์ ๊ฐ๋ณด๋ค
์ ์ด์ผ ์์ง์ผ ์ ์๊ธฐ ๋๋ฌธ์ DFS ํจ์๋ฅผ ์ฝ๋ฉํ ๋ ์กฐ๊ฑด๋ฌธ์ด ํ์ํ๋ค.
- ๋ง์ฝ ๋ฐฉ๋ฌธ์ด ๋์ง ์์ ๊ณณ์ด๋ผ๋ฉด DP ๋ฆฌ์คํธ์ -1๋ก ํํ๋ ์ ์๊ฒ DP ๋ฆฌ์คํธ๋ฅผ -1 ๋ก ๋ชจ๋ ์ฑ์์ ๊ตฌํํ๋ค.
ํ์ฌ ๋ฐฉ๋ฌธํ ์ขํ๊ฐ ๋ฐฉ๋ฌธ์ ์ด๋ฏธ ํ๋ ๊ณณ์ด๋ผ๋ฉด ๋ฐ๋ก ํ์ฌ ์ขํ์ DP ๋ฆฌ์คํธ๋ฅผ return ํ๋ค.