๐ณ ๋งํฌ
๐ ๋ฌธ์
์ฌํ์ ๋ ๋ ์ธ์ค์ด๋ ์ง๋๋ฅผ ํ๋ ๊ตฌํ์๋ค. ์ด ์ง๋๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง์ฌ๊ฐํ ๋ชจ์์ด๋ฉฐ ์ฌ๋ฌ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ํ ์นธ์ ํ ์ง์ ์ ๋ํ๋ด๋๋ฐ ๊ฐ ์นธ์๋ ๊ทธ ์ง์ ์ ๋์ด๊ฐ ์ฐ์ฌ ์์ผ๋ฉฐ, ๊ฐ ์ง์ ์ฌ์ด์ ์ด๋์ ์ง๋์์ ์ํ์ข์ฐ ์ด์ํ ๊ณณ๋ผ๋ฆฌ๋ง ๊ฐ๋ฅํ๋ค.
ํ์ฌ ์ ์ผ ์ผ์ชฝ ์ ์นธ์ด ๋ํ๋ด๋ ์ง์ ์ ์๋ ์ธ์ค์ด๋ ์ ์ผ ์ค๋ฅธ์ชฝ ์๋ ์นธ์ด ๋ํ๋ด๋ ์ง์ ์ผ๋ก ๊ฐ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ๋ฅํ ํ์ ์ ๊ฒ ๋ค์ด๊ณ ์ถ์ด ํญ์ ๋์ด๊ฐ ๋ ๋ฎ์ ์ง์ ์ผ๋ก๋ง ์ด๋ํ์ฌ ๋ชฉํ ์ง์ ๊น์ง ๊ฐ๊ณ ์ ํ๋ค. ์์ ๊ฐ์ ์ง๋์์๋ ๋ค์๊ณผ ๊ฐ์ ์ธ ๊ฐ์ง ๊ฒฝ๋ก๊ฐ ๊ฐ๋ฅํ๋ค.
์ง๋๊ฐ ์ฃผ์ด์ง ๋ ์ด์ ๊ฐ์ด ์ ์ผ ์ผ์ชฝ ์ ์ง์ ์์ ์ถ๋ฐํ์ฌ ์ ์ผ ์ค๋ฅธ์ชฝ ์๋ ์ง์ ๊น์ง ํญ์ ๋ด๋ฆฌ๋ง๊ธธ๋ก๋ง ์ด๋ํ๋ ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๊ทธ๋ฆผ ์ถ์ฒ: https://www.acmicpc.net/problem/1520
๐พ ํ์ด ๋ฐฉ๋ฒ
- ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ ๋์ ํฉํ๋ visit๋ผ๋ m*n๋ฐฐ์ด์ -1๋ก ์ด๊ธฐํํ์ฌ ์์ฑํด์ค๋ค.
- dfs๋ฅผ ํตํด ๋ง์ง๋ง ์ขํ์ธ (m-1, n-1)๋ถํฐ ์์ํ์ฌ (0,0)์ ๋๋ฌํ์ ๋์ 1์ ๋ฆฌํดํ๋ค.
- dfs๋ฅผ ๋๋ฆฌ๊ธฐ ์์ํ ์ขํ์ visit๊ฐ์ ํด๋น dfs์ ๋ฆฌํด๊ฐ์ ํฉ์ ์ ์ฅํ๋ค.
solution ์ฝ๋
- dfs๋ก solveํ ์ฝ๋
import sys
sys.setrecursionlimit(10**7)
sys.stdin = open("input.txt")
dx = [1,-1,0,0]
dy = [0,0,1,-1]
def dfs(x,y):
if x == 0 and y == 0:
return 1
if visit[x][y] == -1:
visit[x][y] = 0
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<n and 0<=ny<m:
if matrix[nx][ny] > matrix[x][y]:
visit[x][y] += dfs(nx,ny)
return visit[x][y]
n,m = [int(x) for x in sys.stdin.readline().split()]
matrix = list()
for _ in range(n):
matrix.append([int(x) for x in sys.stdin.readline().split()])
visit = [[-1] * m for _ in range(n)]
print(dfs(n-1,m-1))
2. dfs๋ก ์๊ฐ์ด๊ณผ ์ฝ๋
dfs์ dp๋ฅผ ํจ๊ป ์ด์ฉํด์ผํ๊ธฐ์ dfs์ visit๋ฐฐ์ด์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํตํด ๋ชจ๋ ํ์ํ๋ฉด, ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค..
```python3
import sys
sys.setrecursionlimit(10**7)
sys.stdin = open("input.txt")
dx = [1,-1,0,0]
dy = [0,0,1,-1]
answer = 0
def dfs(x,y):
global answer
if x == 0 and y == 0:
answer += 1
else:
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<n and 0<=ny<m and visit[nx][ny] == 0:
if matrix[nx][ny] > matrix[x][y]:
visit[nx][ny] = 1
dfs(nx,ny)
visit[nx][ny] = 0
n,m = [int(x) for x in sys.stdin.readline().split()]
matrix = list()
for _ in range(n):
matrix.append([int(x) for x in sys.stdin.readline().split()])
visit = [[0] * m for _ in range(n)]
visit[n-1][m-1] = 1
dfs(n-1,m-1)
print(answer)