소스 코드

import sys
input = sys.stdin.readline
# 판의 크기
n = int(input())

# 판
board = [list(map(int,input().split())) for _ in range(n)]

# 현재까지 해당 위치로 오는 경우의 수 저장
visited = [[0]*n for _ in range(n)]
visited[0][0] = 1

# visited의 값이 0인 경우, 해당 위치로 올 수 있는 방법 없음
for q in range(n):
    for w in range(n):
    	# board의 값이 0이면 이동 불가
        # visited의 값이 0이면 해당 위치로 올 수 있는 방법 없음ㅈ
        if visited[q][w] != 0 and board[q][w] != 0:
            tmp = board[q][w]
            if q+tmp < n:
                visited[q+tmp][w] += visited[q][w]
            if w+tmp < n:
                visited[q][w+tmp] += visited[q][w]

print(visited[-1][-1])

 


해결 방법

1. n의 최대값이 100이므로 for문이 실행되는 최대 횟수는 100*100임

1-1. 시간적인 문제는 발생하지 않을 것?

2. visited의 값이 변경된 경우 == 해당 위치로 올 수 있는 방법이 존재함

3. 다음 위치로 이동할 때, 현재 위치에 도달할 수 있는 경우의 수를 누적해서 다음 위치에 넘겨준다


느낀 점

 

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.