๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [Gold3] 1520๋ฒˆ_๋‚ด๋ฆฌ๋ง‰ ๊ธธ

Dbswnstjd 2023. 4. 19. 15:36

๋ฌธ์ œ

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

 

1520๋ฒˆ: ๋‚ด๋ฆฌ๋ง‰ ๊ธธ

์—ฌํ–‰์„ ๋– ๋‚œ ์„ธ์ค€์ด๋Š” ์ง€๋„๋ฅผ ํ•˜๋‚˜ ๊ตฌํ•˜์˜€๋‹ค. ์ด ์ง€๋„๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์ด๋ฉฐ ์—ฌ๋Ÿฌ ์นธ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋‹ค. ํ•œ ์นธ์€ ํ•œ ์ง€์ ์„ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ๊ฐ ์นธ์—๋Š” ๊ทธ ์ง€์ ์˜ ๋†’์ด๊ฐ€ ์“ฐ์—ฌ ์žˆ์œผ

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 1520๋ฒˆ ๋ฌธ์ œ - ๋‚ด๋ฆฌ๋ง‰ ๊ธธ
from collections import deque
dx, dy = [0,0,-1,1], [1,-1,0,0]
m, n = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(m)]
dp = [[-1]*n for _ in range(m)]
cnt = 0

def dfs(x, y):
    if x == m-1 and y == n-1:
        return 1
    if dp[x][y] == -1:
        dp[x][y] = 0
        
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
        
            if 0 <= nx < m and 0 <= ny < n:
                if graph[x][y] > graph[nx][ny]:
                    dp[x][y] += dfs(nx,ny)
    return dp[x][y]

print(dfs(0,0))

๋งจ ์ฒ˜์Œ ๋‹จ์ˆœํžˆ DFS ๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋˜๋ฉด 500*500 ์˜ ์žฌ๊ท€์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค. 

๋”ฐ๋ผ์„œ ๋ฐฉ๋ฌธํ–ˆ๋˜ ๊ณณ์€ ๋‹ค์‹œ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š”๋ฐ ๊ทธ๊ฒƒ์„ dpํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ํ•ด๊ฒฐํ•˜์˜€๋‹ค.