코딩하는 해맑은 거북이

[Python] 이동하기 - 백준 (DP) 본문

코딩테스트

[Python] 이동하기 - 백준 (DP)

#CJE 2023. 8. 15.
해당 글은 백준 11048번 문제 '이동하기'을 다룬다.

문제

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

 

11048번: 이동하기

준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는

www.acmicpc.net

 

설명

해당 문제는 DP로 해결할 수 있다.

DP로 (n, m)까지 3가지 방향으로 이동하면서, 사탕을 가장 많이 가져갈 수 있는 값으로 업데이트한다.

 

코드

n, m = map(int, input().split())

arr = []
for _ in range(n):
    arr.append(list(map(int, input().split())))

dp = [[0] * m for _ in range(n)]
dp[0][0] = arr[0][0]
for i in range(n):
    for j in range(m):
        if i + 1 < n:
            dp[i + 1][j] = max(dp[i][j] + arr[i + 1][j], dp[i + 1][j])
        if j + 1 < m:
            dp[i][j + 1] = max(dp[i][j] + arr[i][j + 1], dp[i][j + 1])
        if i + 1 < n and j + 1 < m:
            dp[i + 1][j + 1] = max(dp[i][j] + arr[i + 1][j + 1], dp[i + 1][j + 1])
            
print(dp[n-1][m-1])

     

 

 

'코딩테스트' 카테고리의 다른 글

[Python] 배열 돌리기 1 - 백준  (0) 2023.08.23
[Python] 암기왕 - 백준  (0) 2023.08.19
[Python] 제곱수의 합 - 백준 (DP)  (0) 2023.08.15
[Python] 이진 검색 트리 - 백준  (0) 2023.08.15
[Python] 전깃줄 - 백준  (0) 2023.08.15
Comments