출처 : 백준, https://www.acmicpc.net/problem/14430
14430번: 자원 캐기
인류의 차세대 인공지능 자원 캐기 로봇인 WOOK은 인간 대신 자원을 캐는 로봇이다. WOOK은 언제나 제한된 범위 내에서 자원을 탐색하며, 왼쪽 위 (1, 1)부터 오른쪽 아래 (N, M)까지 자원을 탐색한다.
www.acmicpc.net
더보기
먼저, 생각해야 할 부분
1. 로봇이 움직일 수 있는 방향은 오른쪽과 아래 밖에 없다.
어떤 칸에 도착했을 때 얻을 수 있는 자원의 최대 양은 어떤 것을 비교해야할까?
풀이
n, m = map(int, input().split())
blocks = [[0 for _ in range(m+1)]]
for _ in range(n):
blocks.append([0] + list(map(int, input().split())))
for i in range(1, n+1):
for j in range(1, m+1):
blocks[i][j] = max(blocks[i-1][j], blocks[i][j-1]) + blocks[i][j]
print(blocks[i][j])
로봇은 오른쪽과 아래쪽으로만 움직일 수 있으므로,
현재칸 기준으로 위쪽과 왼쪽의 칸 중 각 칸까지 올 때까지 캔 자원의 값을 비교하여 큰 값을 고르고
현재 칸에 자원이 있다면 +1을 해준 값을 내 칸에 넣어준다.
시간 복잡도
O(N*M)
알게 된 점
-
고찰
-
Github
'알고리즘 > Python' 카테고리의 다른 글
[python] 프로그래머스 - 3 x n 타일링 (0) | 2022.07.14 |
---|---|
[python] LeetCode #1 - Two Sum (0) | 2022.07.13 |
[python] 백준 10164 - 격자상의 경로 (0) | 2022.07.10 |
[python] 백준 14494 - 다이나믹이 뭐예요? (0) | 2022.07.10 |
[python] 백준 9657 - 돌 게임3 (0) | 2022.07.10 |