ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
(0, 0)์์ ์ถ๋ฐํ์ฌ, (m - 1, n - 1)์ ๋์ฐฉํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ ๋ฎ์ ์ง์ ์ผ๋ก๋ง ์ด๋ํ ์ ์์ผ๋ฉฐ, ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ๊ตฌํ์ฌ์ผ ํ๋ค. ์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ๋จ์ํ BFS, DFS๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ๊ฒฝ๋ก๋ฅผ ํ์ํ๊ธฐ ์ํด ์ค๋ณต์ผ๋ก ํ์ํ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
๋ฐ๋ผ์, ์ฌ๊ท ํธ์ถ์ ํตํด์ ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ๊ฒฝ๋ก์ ์๋ฅผ ๋ฐํํ๊ณ , ํ๋ฒ ํ์ํ ๊ฒฝ๋ก๋ ๋ ์ด์ ํ์ํ์ง ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ์ผ ์๊ฐ ์ด๊ณผ๋ฅผ ๋ฐ์์ํค์ง ์๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
์์ ์ ๋ ฅ 1์ ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 3๊ฐ์ง์ ๊ฒฝ๋ก ์งํ๋ ์ ์๋ค. ์ด๋ฅผ ๊ณ์ฐ ํ๊ธฐ ์ํด dfs๋ฅผ ํตํด (m - 1, n - 1)๊น์ง ํ์ํ ํ์, ๊ฐ์ return ํด์ฃผ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ค๋ฅธ์ชฝ ์๋ ๋๋ถํฐ ๊ฐ์ด ์ฌ๋ผ์ค๊ฒ ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ์ค์ฒฉํด์ฃผ๋ฉด 3์ด๋ผ๋ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์ ์ ์๋ค.
์ฝ๋
from sys import stdin
def visitable(x, y):
return 0 <= x < m and 0 <= y < n
def dfs(x, y):
if x == m - 1 and y == n - 1:
return 1
if visited[x][y] == -1:
visited[x][y] = 0
for dx, dy in dirs:
next_x, next_y = x + dx, y + dy
if visitable(next_x, next_y):
if graph[next_x][next_y] < graph[x][y]:
visited[x][y] += dfs(next_x, next_y)
return visited[x][y]
if __name__ == '__main__':
dirs = ((0, 1), (0, -1), (1, 0), (-1, 0))
m, n = map(int, stdin.readline().split())
graph = [list(map(int, stdin.readline().split())) for _ in range(m)]
visited = [[-1] * n for _ in range(m)]
print(dfs(0, 0))
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 11047 ๋์ 0 (0) | 2020.09.05 |
---|---|
๋ฐฑ์ค: 1931 ํ์์ค๋ฐฐ์ (0) | 2020.09.05 |
๋ฐฑ์ค: 2468 ์์ ์์ญ (0) | 2020.09.01 |
๋ฐฑ์ค: 10942 ํฐ๋ฆฐ๋๋กฌ? (0) | 2020.08.30 |
๋ฐฑ์ค: 15486 ํด์ฌ 2 (0) | 2020.08.29 |