Skip to content

Commit 4f5ce33

Browse files
committed
[BOJ] #1520.로봇조종하기 / 골드2 / 60(X)
1 parent 9faa578 commit 4f5ce33

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
# 입력
5+
N, M = map(int, input().split()) # 지도의 크기
6+
grid = [list(map(int, input().split())) for _ in range(N)] # 각 지역의 가치
7+
8+
# DP 테이블
9+
dp = [[0] * M for _ in range(N)]
10+
11+
# 첫 번째 행 초기화 (왼쪽에서 오른쪽으로 누적합)
12+
dp[0][0] = grid[0][0]
13+
for j in range(1, M):
14+
dp[0][j] = dp[0][j-1] + grid[0][j] # (0,1)→(0,2)→(0,3)..
15+
16+
# 두 번째 행부터 (왼쪽에서 오른쪽, 오른쪽에서 왼쪽으로 진행)
17+
for i in range(1, N):
18+
left_to_right = [0] * M
19+
right_to_left = [0] * M
20+
21+
# 왼쪽 → 오른쪽
22+
left_to_right[0] = dp[i-1][0] + grid[i][0] # 첫번째 열은 위쪽에서만 올 수 있음
23+
for j in range(1, M): # 두번째 열부터는 위쪽, 왼쪽에서 오는 경우 중 선택
24+
left_to_right[j] = max(dp[i-1][j], left_to_right[j-1]) + grid[i][j]
25+
26+
# 오른쪽 → 왼쪽
27+
right_to_left[M-1] = dp[i-1][M-1] + grid[i][M-1] # 마지막 열은 위쪽에서만 올 수 있음
28+
for j in range(M-2, -1, -1): # 그 다음 열부터는 위쪽, 오른쪽에서 오는 경우 중 선택
29+
right_to_left[j] = max(dp[i-1][j], right_to_left[j+1]) + grid[i][j]
30+
31+
# 두 개의 배열을 비교해 dp[i][j] 갱신
32+
for j in range(M):
33+
dp[i][j] = max(left_to_right[j], right_to_left[j])
34+
35+
# 정답 출력
36+
print(dp[N-1][M-1]) # 마지막 위치에 저장된 값이 탐사한 지역 가치 합의 최대값

learntosurf/Dynamic Programming/2025-02-23-[BOJ]-#

Whitespace-only changes.

0 commit comments

Comments
 (0)