본문 바로가기

알고리즘

[백준 11060] 점프 점프

www.acmicpc.net/problem/11060

 

11060번: 점프 점프

재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로

www.acmicpc.net

 

 

이문제는 DP 개념을 이용해서 여러개의 경우의 수 중 도착에 가까운 순부터 

최적의 경우를 메모리에 저장하는 방식으로 문제를 풀었다.

 

// 점프 점프
#include <iostream>

#define MAX_N 1000 
using namespace std;

int g_nMap[MAX_N];
int g_nDP[MAX_N];

int Jump2End(int N, int nPos)
{
	if(g_nDP[nPos]!= 0)
	{
		return g_nDP[nPos];
	}
	else
	{
		if((nPos + 1) == N)
		{
			return 0;
		}
		else
		{
			if(g_nMap[nPos] == 0)
			{
				g_nDP[nPos] = -1;
				return -1;
			}
			else
			{
				int nMin = MAX_N + 1;
				int nTmp = 0;

				for(int i = 1; i <= g_nMap[nPos]; i++)
				{
					if((i+nPos) >= N)
						break;

					nTmp = Jump2End(N, (nPos + i)) + 1;

					if(nTmp == 0)
						continue;
					else if(nTmp < nMin)
						nMin = nTmp;
				}
				if(nMin == MAX_N + 1)
					nMin = -1;

				g_nDP[nPos] = nMin;

				return nMin;	
			}
		}
	}
}

int main(void)
{
	int N = 0;

	cin >> N;

	for(int i = 0; i < N; i++)
	{
		cin >> g_nMap[i];
	}

	cout << Jump2End(N, 0) << endl;

	return 0;
}

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

[백준 2231] 분해합  (0) 2020.11.01
[백준 19598] 최소 회의실 개수  (1) 2020.11.01
[백준 4848] 집합 숫자 표기법  (0) 2020.11.01
[백준 16953] A > B  (2) 2020.10.16
[백준 11729] 하노이 탑 이동 순서  (0) 2020.10.15