얼렁뚱땅 백준 문제풀이
[백준 문제풀이] 얼렁뚱땅 1890 점프 풀이
MOSTAR
2022. 10. 7. 17:55
https://www.acmicpc.net/problem/1890
1890번: 점프
첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장
www.acmicpc.net
# BFS : 시간초과
- 이 문제를 보고 어떻게 DP로 푸는 생각을 할까?
from collections import deque
n = int(input())
arr = [list(map(int,input().split())) for _ in range(n)]
q = deque()
q.append([0,0])
visited = [[0]*n for _ in range(n)]
visited[0][0] = 1
dx = [0, 1]
dy = [1, 0]
while q :
x, y = q.popleft()
for i in range(2) :
nx = x + arr[x][y]*dx[i]
ny = y + arr[x][y]*dy[i]
if 0<=nx<n and 0<=ny<n :
if visited[nx][ny] == 0 :
visited[nx][ny] = visited[x][y]
if (nx != n-1) or (ny != n-1) :
q.append([nx,ny])
else :
visited[nx][ny] += visited[x][y]
if (nx != n-1) or (ny != n-1) :
q.append([nx,ny])
print(visited[n-1][n-1])
# DP : 통과
- 근데, 아니 ㅡ3ㅡ .. .... ...
- 생각한 로직은 비슷한거 같은데 (더하는거) 이 문제를 보고 어떻게 dp라고 생각하는걸까?
- 그냥 틀려야 하는걸까? .....
n = int(input())
arr = [list(map(int,input().split())) for _ in range(n)]
visited = [[0]*n for _ in range(n)]
visited[0][0] = 1
for i in range(n) :
for j in range(n) :
if i == n-1 and j == n-1 :
print(visited[i][j])
if j + arr[i][j] < n :
visited[i][j+arr[i][j]] += visited[i][j]
if i + arr[i][j] < n :
visited[i+arr[i][j]][j] += visited[i][j]