[백준 DFS, DP] 내리막 길(python)

이진규·2022년 2월 11일
1

백준(PYTHON)

목록 보기
14/115

문제

https://www.acmicpc.net/problem/1520

나의 코드

"""
1. 아이디어


2. 시간복잡도

"""

from sys import stdin
input = stdin.readline

n, m = map(int, input().split())
maps = [ list(map(int, input().split())) for _ in range(n) ]
dp = [ [-1] * m for _ in range(n) ]

dx, dy = [0, 0, -1, 1], [-1, 1, 0, 0]

def dfs(x, y):

    if x == n-1 and y == m-1: # 목적지에 도착하면 1 반환
        return 1

    if dp[x][y] == -1: # 방문한 곳이 아니면 재귀
        dp[x][y] = 0

        for k in range(4):
            mx = x + dx[k]
            my = y + dy[k]

            if 0 <= mx < n and 0 <= my < m:
                if maps[x][y] > maps[mx][my]:
                    dp[x][y] += dfs(mx, my)

    return dp[x][y]

print(dfs(0, 0))
    

느낀점

그냥 이런 형식의 문제를 많이 풀어보는게 답인듯.
이 문제는 그림을 그리면서 풀어야 이해가 잘된다.

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글