μμ μν
μ²μ νμ΄νλ (0,0)~(0,1)μ κ°λ‘λ‘ λμ¬ μλ€. μμμ κ°λ‘λ€. κ·Έλμ dp[0][1][κ°λ‘] = 1λ‘ μ‘λλ€.
DP λ°°μ΄ μλ―Έ
dp[y][x][dir]λ (y,x)μ dir λ°©ν₯μΌλ‘ λμ°©νλ κ²½μ°μ μλ€.
dirμ 0μ΄ κ°λ‘, 1μ΄ μΈλ‘, 2κ° λκ°μ .
μ΄λ κ·μΉ
κ°λ‘λ‘ μ€λ©΄ κ°λ‘λ λκ°μ κ° μ μμ.
μΈλ‘λ‘ μ€λ©΄ μΈλ‘λ λκ°μ λ§ κ°λ₯.
λκ°μ μΌλ‘ μ€λ©΄ κ°λ‘, μΈλ‘, λκ°μ μ λΆ κ°λ₯.
μ΄λ 쑰건
κ°λ‘ μ΄λμ μ€λ₯Έμͺ½λ§ λ²½ μλλ©΄ λ¨.
μΈλ‘ μ΄λμ μλλ§ λ²½ μλλ©΄ λ¨.
λκ°μ μ μ€λ₯Έμͺ½, μλ, λκ°μ λ°©ν₯ μ λΆ λ²½ μλμ΄μΌ ν¨.
νλ¦
μν λλ©΄μ νμ¬ μΉΈ κ°μ΄ 0μ΄λ©΄ 건λλ. κ° μμΌλ©΄ κ° μ μλ λ€μ μΉΈμ λν΄μ€.
μ’ λ£ μ‘°κ±΄
dp[n-1][n-1]μ λͺ¨μΈ κ°λ‘, μΈλ‘, λκ°μ μ λΆ λν΄μ μΆλ ₯.
ν΅μ¬
μ΄λ° DPλ μ΄λμ μλμ§ λ°μ§ νμ μμ. μ§κΈκΉμ§ μ¨ κ°λ§ μμΌλ©΄ λ. λ°°μ΄ λ§λ€κ³ λλ©΄μ λ€μμΌλ‘ λκΈ°λ©΄ λ¨. λ.
# dp
import sys
input=sys.stdin.readline
n=int(input())
graph=[list(map(int,input().split())) for _ in range(n)]
dp=[[[0]*3 for _ in range(n)] for _ in range(n)]
dp[0][1][0]=1
# dir=0,1,2(κ°λ‘,μΈλ‘,λκ°μ )
for y in range(n):
for x in range(n):
for dir in range(3):
if dp[y][x][dir]==0:
continue
#κ°λ‘λ‘ μ¨ κ²½μ°
if dir==0 or dir==2:
#κ°λ‘ μ΄λμ΄ κ°λ₯νλ©΄
if x+1<n and graph[y][x+1]==0:
dp[y][x+1][0]+=dp[y][x][dir]
#μΈλ‘λ‘ μ¨ κ²½μ°
if dir==1 or dir==2:
if y+1<n and graph[y+1][x]==0:
dp[y+1][x][1]+=dp[y][x][dir]
#λκ°μ μΌλ‘ μ¨ κ²½μ° (μΈ λ°©ν₯ λͺ¨λ κ°λ₯)
if x+1<n and y+1<n:
if graph[y][x+1]==0 and graph[y+1][x]==0 and graph[y+1][x+1]==0:
dp[y+1][x+1][2]+=dp[y][x][dir]
print(sum(dp[-1][-1]))'π Algorithm > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| β BOJ 1987 - DFS, Backtracking, Bitmasking (1) | 2025.07.04 |
|---|---|
| β BOJ 1504 - λ€μ΅μ€νΈλΌ μμ© (0) | 2025.07.04 |
| β BOJ 15686 - μ‘°ν© λ°±νΈλνΉ (0) | 2025.07.02 |
| β BOJ 1043 - μ λμ¨ νμΈλ (0) | 2025.07.02 |
| β BOJ 1918 - μ€ν (0) | 2025.07.01 |