-문제:https://www.acmicpc.net/problem/1890
이전에 풀었던 내리막길과 비슷한 문제라고 생각해서 dfs로 풀려고 했는데, 이중 for문으로 풀면 됐던 문제다.
점프를하기때문에 연속적으로 움직이지는 않는다고 생각해 for문은 생각도 못했는데, 어차피 i,j를 기준으로 칸에 있는 숫자만큼 이동하면되니까 i와 j가 순서대로 움직여도 상관없을 것 같다
이부분 빼면 안된다. 이걸 빼면 (n-1,n-1)도 카운트 돼서 dp[-1][-1]값이 4배가 된다.
if i==n-1 and j==n-1:
break
-정답풀이
n=int(input())
data=[]
for _ in range(n):
data.append(list(map(int,input().split())))
dp=[[0]*n for _ in range(n)]
dp[0][0]=1
for i in range(n):
for j in range(n):
if i==n-1 and j==n-1:
break
if i+data[i][j]<n:
dp[i+data[i][j]][j]+=dp[i][j]
if j+data[i][j]<n:
dp[i][j+data[i][j]]+=dp[i][j]
print(dp[-1][-1])
-시도해본 풀이
n=int(input())
data=[]
for _ in range(n):
data.append(list(map(int,input().split())))
dp=[[0]*n for _ in range(n)]
dx=[0,1]
dy=[1,0]
def dfs(x,y):
if data[x][y]==0:
dp[x][y]+=1
return 1
for i in range(2):
nx,ny=dx[i]*data[x][y]+x,dy[i]*data[x][y]+y
if 0<=nx<n:
dfs(nx,y)
if 0<=ny<n:
dfs(x,ny)
return dp[-1][-1]
print(dfs(0,0))
'백준 > DP' 카테고리의 다른 글
[dp/백준] 9252번: LCS2 (0) | 2022.06.18 |
---|---|
[dp/백준] 1937번: 욕심많은 판다(다시 풀어보기) (0) | 2022.06.18 |
[dp/백준] 2565번: 전깃줄 (0) | 2022.06.17 |
[dp/백준] 1309번: 동물원 (0) | 2022.06.17 |
[dp/백준] 2225번: 합분해 (0) | 2022.06.16 |