본문 바로가기

코딩테스트

[JAVA] 백준 11048 - 이동하기

728x90

https://www.acmicpc.net/problem/11048

 

11048번: 이동하기

준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는

www.acmicpc.net

 

🤔 문제 풀이

dp 문제 치곤 굉장히 쉬운 문제였다.

 

문제에서 이동할 수 있는 방향은 자기 자신을 기준으로 x+1 or y+1 or x+1, y+1 만 존재한다.

나는 먼저 map배열을 생성하여 좌표 별 사탕 개수 정보를 입력 받았고

dp 배열을 생성하여 현재 좌표에서 dp 배열 x-1, y  and  x, y-1 and x-1, y-1  좌표 값들의 최대 값을 구하고

현재 좌표에서 가져갈 수 있는 사탕 개수를 더해 각 좌표별 가져갈 수 있는 최대 사탕 개수를 갱신해주었다.

 

import java.io.*;
import java.util.*;

public class Main {
	static int[][] map;
	static int[][] dp;
	static int n,m;
	public static void main(String[] args) throws Exception {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		n = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(st.nextToken());
		
		map = new int[n+1][m+1];
		dp = 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());
			}
		}
		
		for(int i = 1; i<=n; i++) {
			for(int j = 1; j<=m; j++) {
				dp[i][j] = Math.max(dp[i-1][j], Math.max(dp[i][j-1], dp[i-1][j-1]))
						+ map[i][j];
			}
		}
		
		System.out.println(dp[n][m]);
			
	}
}

 

728x90
반응형

'코딩테스트' 카테고리의 다른 글

[Silver2-JAVA] 백준 13565 - 침투  (1) 2024.03.23
[Gold4-JAVA] 백준 1967 - 트리의 지름  (1) 2024.03.22
[JAVA] 백준 1238 - 파티  (0) 2024.03.18
[JAVA] 백준 9465 - 스티커  (0) 2024.03.11
[JAVA] 백준 1932 - 정수 삼각형  (0) 2024.03.10