반응형
import sys
sys.setrecursionlimit(10**6)
dr = [0, 1, 0,-1]
dc = [1, 0,-1, 0]
def dfs(r ,c):
global state, visited
if not(0<=r<N and 0<=c<M) or board[r][c] == 'H':
return 0
if visited[r][c]:
state = True
return -1
if dp[r][c] != -1:
return dp[r][c]
visited[r][c] = True
X = int(board[r][c])
for i in range(4):
dp[r][c] = max(dp[r][c], dfs(r+dr[i]*X, c+dc[i]*X)+1)
if state:
return -1
visited[r][c] = False
return dp[r][c]
if __name__ == '__main__':
N, M = map(int, input().split())
board = [input() for _ in range(N)]
visited = [[False]*M for _ in range(N)]
dp = [[-1]*M for _ in range(N)]
state = False
print(dfs(0,0))
위 문제는
DFS(Depth-First Search, 깊이 우선 탐색)와
DP(Dynamic Programming, 동적계획법)을 이해해야합니다.
DP에 대한 내용은 아래와 같습니다.
velog.io/@chelsea/1-%EB%8F%99%EC%A0%81-%EA%B3%84%ED%9A%8D%EB%B2%95Dynamic-Programming-DP
반응형