-
[Java] BOJ 11048 이동하기개발자 취업/코딩테스트 준비 2023. 6. 18. 10:50반응형
11048번: 이동하기
준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는
www.acmicpc.net
정답 코드
- 2차원 DP 문제
- 가능한 경우(가로 세로 대각)에 대해여 최대값을 더하면서 계산
import java.io.*; import java.util.*; public class Main { static BufferedReader br; static BufferedWriter bw; static StringTokenizer st; static int N,M; static int[][] arr, dp; public static void main(String[] args) throws IOException { br = new BufferedReader(new InputStreamReader(System.in)); bw = new BufferedWriter(new OutputStreamWriter(System.out)); st = new StringTokenizer(br.readLine(), " "); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); arr = new int[N][M]; for (int i = 0; i < N; i++) { st = new StringTokenizer(br.readLine(), " "); for (int j = 0; j < M; j++) { arr[i][j] = Integer.parseInt(st.nextToken()); } } dp = new int[N][M]; dp[0][0] = arr[0][0]; for (int i = 1; i < N; i++) { dp[i][0] = dp[i - 1][0] + arr[i][0]; } for (int i = 1; i < M; i++) { dp[0][i] = dp[0][i - 1] + arr[0][i]; } for (int i = 1; i < N; i++) { for (int j = 1; j < M; j++) { int max = Math.max(dp[i - 1][j - 1], dp[i - 1][j]); max = Math.max(max, dp[i ][j-1]); dp[i][j] = max + arr[i][j]; } } System.out.println(dp[N-1][M-1]); } }
'개발자 취업 > 코딩테스트 준비' 카테고리의 다른 글
[토스 NEXT] 2022년 코딩테스트 Server 기출문제 풀기 (0) 2023.07.04 [Java] BOJ 11561 징검다리 (0) 2023.07.02 [Java] BOJ 27964 콰트로치즈피자 (0) 2023.06.14 [Java] BOJ 20157 화살을 쏘자! (0) 2023.06.13 [Java] BOJ 1515 수 이어 쓰기 (0) 2023.06.13