➰ 취업준비/알고리즘 문제풀이
[Python][백준][11048] 이동하기 (DP)
사과개발자
2021. 3. 29. 23:28
🍋 문제링크
🍎 코드 제출 기록 (메모리 및 시간)
메모리 : 37064KB
시간 : 1000ms
🍉 Code
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
dp = [[0] * (M + 1)] * (N + 1)
candy = []
for i in range(N):
candy.append(list(map(int, input().split())))
for i in range(1, N+1):
for j in range(1, M+1):
dp[i][j] = max(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + candy[i-1][j-1]
print(dp[N][M])
🥝 메모
<문제 접근>
dp[N][M] 를 구할 수 있는 경우의 수는 총 3가지로
- dp[N-1][M] + candy
- dp[N][M-1] + candy
- dp[N-1][M-1] + candy
위의 경우 들을 모두 구해서 그 중의 가장 큰 값을 dp[N][M]로 결정하면 된다
<python : 2차원 배열 입력받기>
for i in range(N):
arr.append(list(map(int, input().split())))
반응형