-
백준 11048 - JavaJava/코딩테스트 2023. 6. 29. 13:58
https://www.acmicpc.net/problem/11048
11048번: 이동하기
준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는
www.acmicpc.net
쉬운 동적계획법 문제
이동 가능한 방향이 오른쪽, 아래쪽, 대각선 오른아래.
그러므로 각 칸의 최대 사탕개수는 자신의 왼쪽, 위쪽, 대각선 왼쪽 위 중의 최댓값 + 그 칸에서 얻을 수 있는 사탕개수가 된다.
이 점화식을 바탕으로 풀어나가면 되는 문제.
import java.io.*; import java.util.*; public class p11048 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int row = Integer.parseInt(st.nextToken()); int column = Integer.parseInt(st.nextToken()); int[][] info = new int[row][column]; int[][] DP = new int[row][column]; for (int i = 0; i < row; i++) { st = new StringTokenizer(br.readLine()); for (int j = 0; j < column; j++) { info[i][j] = Integer.parseInt(st.nextToken()); } } DP[0][0] = info[0][0]; for (int i = 1; i < row; i++) { DP[i][0] = DP[i-1][0] + info[i][0]; } for (int j = 1; j < column; j++) { DP[0][j] = DP[0][j-1] + info[0][j]; } for (int i = 1; i < row; i++) { for (int j = 1; j < column; j++) { int max = Math.max(DP[i-1][j], DP[i][j-1]); max = Math.max (DP[i-1][j-1], max); DP[i][j] = Math.max(info[i][j] + max, DP[i][j]); } } System.out.println(DP[row-1][column-1]); } }
'Java > 코딩테스트' 카테고리의 다른 글
백준 20058, 프로그래머스 - 섬 연결하기, 보석쇼핑 (0) 2023.07.12 백준 2579, 11057 - JAVA (0) 2023.07.05 백준 9205 - Java (0) 2023.06.29 프로그래머스 도둑질 - Java (0) 2023.05.26 백준 7569, 2573 - Java (0) 2023.05.26