Baekjoon

[백준 DP] 11048번 - 이동하기

yujin0517 2022. 12. 28. 16:06

11048번 - 이동하기 

 

<문제>

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

 

11048번: 이동하기

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

www.acmicpc.net

 

<문제 풀기>

문제를 이해하고 가장 먼저 떠오른 방법은 역추적이다. 

알고리즘 학부 수업시간에서 최단경로 문제를 풀 때 역추적으로 해결한 기억이 있어 추적의 시작점을 dp [N][M]으로 설정하였다. 실행 결과는 동일하지만 제출하니 틀렸다고 한다....

역추적으로 문제 풀이를 시작한 만큼 해결하고 싶었는데 얼떨결에 dp [1][1]부터 시작한 추적도 답과 동일한 결과가 나왔다. 

점화식은 간단하다. arr[i-1][j], arr[i][j-1], arr[i-1][j-1]의 값을 비교하여 가장 큰 값을 누적하여 출력 값을 구해주면 된다. 

점화식: arr[i][j] += max({arr [i - 1][j], arr[i][j - 1], arr[i - 1][j - 1]})

(아직 역추적 문제 해결 못 함.)

 

<코드>

더보기
#include <iostream>
#include <algorithm>
using namespace std;

int N, M;
int arr[1001][1001] = { 0, };

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> N >> M;

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= M; j++) {
			cin >> arr[i][j];
		}
	}

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= M; j++) {
			arr[i][j] += max({ arr[i - 1][j], arr[i][j - 1], arr[i - 1][j - 1] });
		}
	}

	cout << arr[N][M] << '\n';
	return 0;
}

 

-> 역추적 

더보기
#include <iostream>
#include <algorithm>
using namespace std;

int N, M;
int arr[1001][1001] = { 0, };

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> N >> M;

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= M; j++) {
			cin >> arr[i][j];
		}
	}

	for (int i = N; i >= 1; i--) {
		for (int j = M; j >= 1; j--) {
			arr[i][j] += max({ arr[i + 1][j], arr[i][j + 1], arr[i + 1][j + 1] });
		}
	}

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= M; j++) {
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}

	cout << arr[1][1] << '\n';
	return 0;
}

 

<결과>

 

 

2022.12.28

'Baekjoon' 카테고리의 다른 글

[백준 DP] 9251번 - LCS  (0) 2023.01.04
[백준 DP] 2293번 - 동전 1  (0) 2023.01.04
[백준 DP] 11660번 - 구간 합 구하기 5  (0) 2022.12.28
[백준 DP] 11057번 - 오르막 수  (0) 2022.12.22
[백준 DP] 12865번 - 평범한 배낭  (0) 2022.12.19