문제
풀이
import sys
input = sys.stdin.readline
n = int(input())
game_map = [list(map(int, input().split())) for _ in range(n)]
dp = [[0] * n for _ in range(n)]
dp[0][0] = 1
def move():
for i in range(n):
for j in range(n):
k = game_map[i][j]
if k == 0:
continue
# 아래로 이동
if i+k < n:
dp[i+k][j] += dp[i][j]
# 오른쪽으로 이동
if j+k < n:
dp[i][j+k] += dp[i][j]
return dp[-1][-1]
print(move())
bfs로 처음에 접근했다가 안풀려서 고민하다 풀이를 보았다.
dp로 풀면 생각보다 간단하다.
아이디어
- dp를 주어진 n * n만큼 0으로 초기화하고 dp[0][0] = 1(출발지)로 설정해준다.
- 해당 칸에서 아래(i+k) 혹은 오른쪽(j+k)으로 이동시 게임판 범위 안에 들어간다면 해당 위치 dp에 현재 위치 dp 값을 더해준다. (dp[i+k][j] += dp[i][j], 즉 + 1)
- 게임판의 0에 도달하면 이동을 멈춘다.
- dp의 마지막 칸에 도달할 수 있는 경로의 수가 +1씩 되어서 자동으로 담긴다.
- 가장 오른쪽 아래 칸 (n-1, n-1)을 출력한다.
참고
https://code-angie.tistory.com/12
'Algorithms > 코테 문풀' 카테고리의 다른 글
[백준 24444, 24445번] 알고리즘 수업 - 너비 우선 탐색 1, 2 (0) | 2024.04.21 |
---|---|
[백준 28279번] 덱 2 - Python, 덱 주요 메서드/시간 복잡도 (0) | 2024.04.03 |
[백준 10844번] 쉬운 계단 수 - Python (0) | 2024.03.22 |
[4963번] 섬의 개수 - Python (0) | 2024.03.19 |
[백준 11725번] 트리의 부모 찾기 🤯 (1) | 2024.03.15 |