알고리즘/백준
BOJ) 이동하기
Zin0_0
2020. 8. 2. 00:01
반응형
이동하기
11048번: 이동하기
준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 ��
www.acmicpc.net
풀이
미로에 같힌 준규가 각 방에 놓여있는 사탕을 주워먹으면서 갈 때, 먹을 수 있는 사탕의 최대 갯수를 구하는 문제다.
이 문제는 언젠가 풀었던 것 같다. 아마 프로그래머스 문제 중 하나이지 않을까 싶다.
아무튼, dp를 이용해서 문제를 풀었다.
맵의 처음부터 x축을 순회하면서 좌측과 상단 중 사탕이 더 많은 갯수를 더해가면서 마지막 위치에 도달하게 설정했다.
이후, n, m의 dp값을 출력해서 답을 쉽게 구할 수 있었다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] map = new int[n+1][m+1];
for(int i=1; i<=n; i++) {
st = new StringTokenizer(br.readLine());
for(int j=1; j<=m; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
br.close();
solution(n,m,map);
}
private static void solution(int n, int m, int[][] map) {
int dp[][] = new int[n+1][m+1];
for(int y=1; y<=n; y++) {
for(int x=1; x<=m; x++) {
dp[y][x] = map[y][x] + Math.max(dp[y-1][x], dp[y][x-1]);
}
}
System.out.println(dp[n][m]);
}
}
반응형