728x90
문제출처: https://www.acmicpc.net/problem/11048
11048번: 이동하기
준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는
www.acmicpc.net
1. 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
|
n,m = map(int, input().split())
maze =[]
for _ in range(n):
maze.append(list(map(int, input().split())))
dp =[[0]*(m+1)]*(n+1)
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])+maze[i-1][j-1]
print(dp[n][m])
|
cs |
2. 해결과정
이차원 배열을 설정해서, maze라는 배열에 사탕의 갯수를 입력받는다.
dp에는 각 자리에 올 수 있는 가장 많은 갯수를 담아주면 되는데. 오른쪽, 밑, 오른쪽 밑 대각선으로 움직일 수 있기 때문에 반대로, 왼쪽, 위, 왼쪽 위 대각선의 dp값을 비교해서 가장 큰 max값과 더해주면 원하는 값을 구할 수 있다.
3. 느낀점
dp문제는 점화식만 찾으면 풀 수 있을 것 같은 문제가 많은 것 같다..
728x90
'공부 자료 > 알고리즘' 카테고리의 다른 글
(Python/파이썬) 백준 2579번 - 계단 오르기 (0) | 2021.08.09 |
---|---|
(Python/파이썬) 백준 11722번 - 가장 긴 감소하는 부분 수열 (0) | 2021.08.09 |
(Python/파이썬) 백준 1120번 - 문자열 (0) | 2021.08.06 |
(Python/파이썬) 백준 1292번 - 쉽게 푸는 문제 (0) | 2021.08.06 |
(Python/파이썬) 백준 9093번 - 단어 뒤집기 (0) | 2021.08.06 |