https://www.acmicpc.net/problem/1520
DFS를 통해 구현하 되 메모이제이션을 하지 않는다면 시간초과가 날 것입니다.
특정 좌표에서 가고자 하는 좌표까지 갈 수 있는 경우의 수를 계속해서 배열에 저장해준다면, 다음 번에 그 좌표를 만났을 때 재귀를 돌지 않고 바로 값을 받을 수 있게 되므로 시간을 많이 단축 시킬 수 있습니다.
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
dy = [0, 1, 0, -1]
dx = [1, 0, -1, 0]
my_map = []
row, column = map(int, input().split())
for _ in range(row):
my_map.append(list(map(int, input().split())))
cache = [[-1 for _ in range(column)] for _ in range(row)]
def dfs(y, x):
if y == row-1 and x == column-1:
return 1
if cache[y][x] != -1:
return cache[y][x]
cache[y][x] = 0
for ii in range(4):
ny = y + dy[ii]
nx = x + dx[ii]
if not 0<=nx<column or not 0<=ny<row:
continue
if my_map[ny][nx] >= my_map[y][x]:
continue
cache[y][x] += dfs(ny, nx)
return cache[y][x]
print(dfs(0, 0))