삐까냥의 파도타기

Q2169. 로봇 조종하기 본문

코딩/백준 알고리즘

Q2169. 로봇 조종하기

금손형아 2019. 3. 2. 20:00

최대값을 저장하며 나아가는 로직


문제는 로봇이 왼쪽, 오른쪽, 아래쪽으로 갈 수 있습니다.

따라서 아래쪽으로 이동할경우를 고려하여 오른쪽 방향으로 이동할 경우의 최대값과 왼쪽 방향으로 이동할 경우의 최대값을 구해야합니다.


첫째줄은 max값 비교없이 오른쪽으로 이동하면 됩니다.


import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.StringTokenizer;


public class Q2169 {


static int[][] dp, value;

public static void main(String[] args) throws Exception {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

StringTokenizer st = new StringTokenizer(br.readLine());

int y = Integer.parseInt(st.nextToken());

int x = Integer.parseInt(st.nextToken());

dp = new int[y+1][x+1];

value = new int[y+1][x+1];

for (int i = 1; i <= y; i++) {

st = new StringTokenizer(br.readLine());

for (int j = 1; j <= x; j++) {

value[i][j] = Integer.parseInt(st.nextToken());

}

}

int[] moveRight = new int[x+1];

dp[1][1] = value[1][1];

for (int j = 2; j <= x; j++) {

dp[1][j] = dp[1][j-1] + value[1][j];

}

for (int i = 2; i <= y; i++) {

moveRight = new int[x+1];

moveRight[1] = dp[i-1][1] + value[i][1];

for (int j = 2; j <= x; j++) {

moveRight[j] = Math.max(moveRight[j-1], dp[i-1][j]) + value[i][j];

}

int[] moveLeft = new int[x+1];

moveLeft[x] = dp[i-1][x] + value[i][x];

for (int j = x-1; j >= 1; j--) {

moveLeft[j] = Math.max(dp[i-1][j], moveLeft[j+1]) + value[i][j];

}

for (int j = 1; j <= x; j++) {

dp[i][j] = Math.max(moveLeft[j], moveRight[j]);

}

}

System.out.println(dp[y][x]);

}


'코딩 > 백준 알고리즘' 카테고리의 다른 글

Q1038. 감소하는 수  (0) 2019.03.03
Q2631. 줄세우기  (0) 2019.03.02
Q2240. 자두나무  (0) 2019.03.02
Q2294. 동전 2  (0) 2019.03.01
Q1495. 기타리스트  (0) 2019.02.27