[Algo] 백준1520_내리막 길

AOD·2023년 6월 24일
0

Algorithm

목록 보기
26/31
post-thumbnail

백준1520_내리막 길

N, M = map(int,input().split())
G = [[0] * (M + 2)] + [[0] + list(map(int,input().split())) + [0] for _ in range(N)] +[[0] * (M + 2)]
dp = [[-1] * (M + 2) for _ in range(N + 2)]
dp[1][1] = 1

def DFS(r,c):
    if dp[r][c] == -1:
        dp[r][c] = 0
        for dr, dc in ((1,0),(0,1),(-1,0),(0,-1)):
            nr, nc = r + dr, c + dc
            if G[nr][nc] > G[r][c]:
                dp[r][c] += DFS(nr,nc)

    return dp[r][c]

print(DFS(N,M))
  • DFS를 재귀 형태 풀어낸 DP문제이다.
  • 도착 지점에서 DFS를 시작하여 한번 탐색한 지점에 도달했을 때 그 지점의 DP테이블에 기록 되어있는 경로 수를 반환한다.

(1) 첫 번째 케이스 살펴보기

  • 맨 처음 그래프가 초기 상태이다.
  • DFS 함수 내에서 for문으로 들어와 nr,nc 다음경로를 가지고 재귀한다.
  • 이렇게 멈추게 되는 지점까지 dp테이블을 0이 값을 넣으며 전진한다.
  • dp[0][0] == 1 인 값에 도달하면 1을 반환하여 지금까지 거쳐온 DP테이블 지점에 값을 누적하여 되돌아간다.
  • 이 과정을 반복한다.

💯 DFS를 재귀로 코드를 짜보는 연습이 필요할 듯하다.

profile
No end point for Growth. 2023.01.02 ~ SoftWare공부 시작

0개의 댓글