https://www.acmicpc.net/problem/11048
접근법
기본적인 DP 풀이법
핵심은 DP[nextX][nextY] < DP[x][y] + Array[nextX][nextY]를 판단해서 더 큰 경우 DP배열을 갱신해주고
출력할 때는 마지막 (N-1, M-1)값을 출력해줌
소스
import java.util.*;
import java.io.*;
public class Main {
static int N, M;
static int[][] Array;
static int[][] DP;
static int[][] dir = {{1,0},{0,1},{1,1}};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
Array = new int[N][M];
DP = new int[N][M];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for(int j = 0; j < M; j++) {
Array[i][j] = Integer.parseInt(st.nextToken());
}
}
DP[0][0] = Array[0][0];
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
for(int k = 0; k < 3; k++) {
int nextX = i + dir[k][0];
int nextY = j + dir[k][1];
if(nextX >= N || nextY >= M) continue;
if(DP[i][j] + Array[nextX][nextY] > DP[nextX][nextY]) {
DP[nextX][nextY] = DP[i][j] + Array[nextX][nextY];
}
}
}
}
System.out.println(DP[N-1][M-1]);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 - 17070번 파이프 옮기기 1 - java (0) | 2023.08.10 |
---|---|
백준 - 1719번 택배 - java (0) | 2023.08.09 |
백준 - 11779번 최소비용 구하기 2 - java (0) | 2023.08.06 |
백준 - 2623번 음악프로그램 - java (0) | 2023.08.05 |
백준 - 1600번 말이 되고픈 원숭이 - java (0) | 2023.08.04 |