알고리즘/BOJ

[BOJ] 백준 11048번: 이동하기

벨에삐 2023. 3. 9. 02:07

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

 

11048번: 이동하기

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

www.acmicpc.net

 

백준 난이도 실버 2의 기본적인 dp 문제입니다.

 

#include <bits/stdc++.h>
using namespace std;

int N, M, board[1001][1001], dp[1001][1001];

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> N >> M;
	
	for(int i = 1; i <= N; ++i){
		for(int j = 1; j <= M; ++j){
			cin >> board[i][j];
		}
	}
	
	for(int i = 1; i <= N; ++i){
		for(int j = 1; j <= M; ++j){
			dp[i][j] = max(dp[i-1][j-1], max(dp[i-1][j], dp[i][j-1])) + board[i][j];
		}
	}
	
	cout << dp[N][M];
}

 

dp문제는 항상 그래왔듯 1) table 정의, 2) 점화식 찾기, 3) 초기값 설정의 3단계로 풀이합니다.

 

1) table 정의

dp[i][j] : (i, j)으로 이동할 때, 가져올 수 있는 사탕 개수의 최댓값

 

2) 점화식 찾기

dp[i][j] = max(dp[i-1][j-1], max(dp[i-1][j], dp[i][j-1])) + board[i][j];

 

3) 초기값 설정

1-based index로 i = 0, j = 0 부분이 경계치 역할을 하여 초기값 설정이 불필요합니다.

 

 

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ] 백준 1520번: 내리막 길  (0) 2023.05.17
[BOJ] 백준 1275번: 커피숍2  (0) 2023.03.01
[BOJ] 백준 17404번: RGB 거리 2  (1) 2023.02.28
[BOJ] 백준 11051번: 이항 계수 2  (0) 2023.02.27
[BOJ] 백준 11057번: 오르막 수  (0) 2023.02.27