Skip to content

Commit d6e6bf0

Browse files
committed
[BOJ] #2169. 로봇 조종하기 / 골드2 / 90분 / 힌트, 성공
1 parent 0013817 commit d6e6bf0

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
# 입력
5+
N, M = map(int, input().split())
6+
nums = []
7+
for _ in range(N):
8+
nums.append(list(map(int, input().split())))
9+
10+
dp = [[0] * M for _ in range(N)]
11+
12+
# 첫 줄
13+
dp[0][0] = nums[0][0]
14+
for j in range(1, M):
15+
dp[0][j] = dp[0][j - 1] + nums[0][j]
16+
17+
# 왼쪽 누적합 업데이트 -> 오른쪽 누적합 업데이트, 이후 둘 중 더 큰 값으로 업데이트
18+
for i in range(1, N):
19+
20+
left_prefix_sum = [0] * M # 왼쪽 누적합
21+
right_prefix_sum = [0] * M # 오른쪽 누적합
22+
23+
# 왼쪽 누적합
24+
left_prefix_sum[0] = dp[i-1][0] + nums[i][0]
25+
for j in range(1, M):
26+
left_prefix_sum[j] = max(dp[i-1][j], left_prefix_sum[j-1]) + nums[i][j]
27+
28+
# 오른쪽 누적합
29+
right_prefix_sum[M-1] = dp[i-1][M-1] + nums[i][M-1]
30+
for j in range(M-2, -1, -1):
31+
right_prefix_sum[j] = max(dp[i-1][j], right_prefix_sum[j+1]) + nums[i][j]
32+
33+
# DP에 저장
34+
for j in range(M):
35+
dp[i][j] = max(left_prefix_sum[j], right_prefix_sum[j])
36+
37+
# 정답 출력
38+
print(dp[N-1][M-1])

0 commit comments

Comments
 (0)