본문 바로가기

컴퓨터/코테

백준 1890 점프 - [dp]

import sys
input = sys.stdin.readline
N = int(input())
arr = [list(map(int, input().split())) for i in range(N)]
dp = [[-1 for j in range(N)] for i in range(N)]

def dfs(y, x):
    if y == N-1 and x == N-1 : return 1
    if dp[y][x] == -1:
        dp[y][x] = 0
        jump = arr[y][x]
        if y + jump < N: dp[y][x] += dfs(jump + y, x)
        if x + jump < N: dp[y][x] += dfs(y, jump + x)
    return dp[y][x]

print(dfs(0,0))

dp를 최대한 활용해서 시간초과가 안나게끔 하는것이 핵심이었던 문제

 

 

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

 

1890번: 점프

첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장

www.acmicpc.net