[문제 링크]

 

1937번: 욕심쟁이 판다

n*n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에서

www.acmicpc.net


https://onlytrying.tistory.com/104 점프 문제와 유사한 유형의 문제였다.

 

(y,x) 좌표에서 판다가 생존할 수 있는 일수는 항상 같기 때문에 이를 메모이제이션 해주면 중복 탐색을 최소화하게 되어 빠르게 정답을 구할 수 있다.


#include <iostream>
using namespace std;

int N, map[501][501], memo[501][501];
int dy[4] = { -1,1,0,0 };
int dx[4] = { 0,0,-1,1 };

int max(int a, int b) { return a > b ? a : b; }

int Topdown(int startY, int startX)
{
	int& ret = memo[startY][startX];
	if (ret != 0) return ret;

	ret = 1;

	for (int i = 0; i < 4; i++)
	{
		int nextY = startY + dy[i];
		int nextX = startX + dx[i];
		if (nextY <= N && nextX <= N && map[startY][startX] < map[nextY][nextX])
			ret = max(ret, Topdown(nextY, nextX) + 1);
	}

	return ret;
}

int main(void)
{
	cin >> N;

	for (int i = 1; i <= N; i++)
		for (int j = 1; j <= N; j++)
			cin >> map[i][j];

	int res = 1;
	for (int i = 1; i <= N; i++)
		for (int j = 1; j <= N; j++)
			res = max(res, Topdown(i, j));

	cout << res << endl;

	return 0;
}

알고리즘 200일 프로젝트 - 92 day

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

백준 1965번: 상자넣기  (0) 2020.07.06
백준 6359번: 만취한 상범  (0) 2020.07.06
백준 1309번: 동물원  (0) 2020.07.05
백준 1890번: 점프  (0) 2020.07.03
백준 2225번: 합분해  (0) 2020.07.03

+ Recent posts