-
[๋ฐฑ์ค] 1520 ๋ด๋ฆฌ๋ง ๊ธธ with PythonPS 2022. 6. 10. 15:44728x90๋ฐ์ํ
๐ BOJ 1520 ๋ด๋ฆฌ๋ง ๊ธธ
๐ก ์กฐ๊ฑด
- ์ง๋๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง์ฌ๊ฐํ ๋ชจ์์ด๋ฉฐ ์ฌ๋ฌ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค.
ํ ์นธ์ ํ ์ง์ ์ ๋ํ๋ด๋๋ฐ ๊ฐ ์นธ์๋ ๊ทธ ์ง์ ์ ๋์ด๊ฐ ์ฐ์ฌ ์์ผ๋ฉฐ, ๊ฐ ์ง์ ์ฌ์ด์ ์ด๋์ ์ง๋์์ ์ํ์ข์ฐ ์ด์ํ ๊ณณ๋ผ๋ฆฌ๋ง ๊ฐ๋ฅํ๋ค.
- ํ์ฌ ์ ์ผ ์ผ์ชฝ ์ ์นธ์ด ๋ํ๋ด๋ ์ง์ ์ ์๋ ์ธ์ค์ด๋ ์ ์ผ ์ค๋ฅธ์ชฝ ์๋ ์นธ์ด ๋ํ๋ด๋ ์ง์ ์ผ๋ก ๊ฐ๋ ค๊ณ ํ๋ค.
๊ทธ๋ฐ๋ฐ ๊ฐ๋ฅํ ํ์ ์ ๊ฒ ๋ค์ด๊ณ ์ถ์ด ํญ์ ๋์ด๊ฐ ๋ ๋ฎ์ ์ง์ ์ผ๋ก๋ง ์ด๋ํ์ฌ ๋ชฉํ ์ง์ ๊น์ง ๊ฐ๊ณ ์ ํ๋ค.
์์ ๊ฐ์ ์ง๋์์๋ ๋ค์๊ณผ ๊ฐ์ ์ธ ๊ฐ์ง ๊ฒฝ๋ก๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ง๋๊ฐ ์ฃผ์ด์ง ๋ ์ด์ ๊ฐ์ด ์ ์ผ ์ผ์ชฝ ์ ์ง์ ์์ ์ถ๋ฐํ์ฌ ์ ์ผ ์ค๋ฅธ์ชฝ ์๋ ์ง์ ๊น์ง
ํญ์ ๋ด๋ฆฌ๋ง๊ธธ๋ก๋ง ์ด๋ํ๋ ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- ์ฒซ์งธ ์ค์๋ ์ง๋์ ์ธ๋ก์ ํฌ๊ธฐ 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 ํ๋ค.
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2644 ์ด์๊ณ์ฐ with Python (0) 2022.06.13 [๋ฐฑ์ค] 2512 ์์ฐ with Python (0) 2022.06.10 [๋ฐฑ์ค] 1309 ๋๋ฌผ์ with Python (0) 2022.06.07 [๋ฐฑ์ค] 1238 ํํฐ with Python (0) 2022.06.07 [๋ฐฑ์ค] 1057 ํ ๋๋จผํธ with Python (0) 2022.06.05 - ์ง๋๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง์ฌ๊ฐํ ๋ชจ์์ด๋ฉฐ ์ฌ๋ฌ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค.