등굣길

108번뇌·2021년 8월 2일
0

https://programmers.co.kr/learn/courses/30/lessons/42898


#include <string>
#include <vector>

using namespace std;


int solution(int m, int n, vector<vector<int>> puddles) {
	int answer = 0;
	//m: x , n : y
	int dp[101][101] = { 0, };

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			dp[i][j] = 1;//일단 모든 곳에 다 1로 갈수 있다고 도배한다.
		}
	}

	for (int i = 0; i < puddles.size(); i++)//0 : x이고 1 : y이다.
	{
		int x = puddles[i][0]-1;//좌표를 위한 마이너스 1처리가 되있지않았음.
		int y = puddles[i][1]-1;	


		if (x == 0)
		{
			for (int j = y; j < n; j++)///x가 영일 때 y부분들을 전부 0처리한다. 
			{
				dp[j][0] = 0;
			}
		}
		

		if (y == 0)
		{
			for (int j = x; j < m; j++)//y가 0일때 x부분들을 전부 0처리한다/
			{
				dp[0][j] = 0;
			}
		}
		

		dp[y][x] = 0;///물웅덩이로 인해서 길을 갈 수 없는 부부입니다.
	}

	for (int i = 1; i < n; i++)//y좌표
	{
		for (int j = 1; j < m; j++)//x좌표
		{
			if (dp[i][j]==0) continue;

			dp[i][j] = (dp[i][j - 1] + dp[i - 1][j])%1000000007;
		}
	}

	return dp[n-1][m-1];
}




int main()
{

	int m(4);
	int n(3);

	vector<vector<int>> vvTemp = { {2,2} };




	int iTemp = solution(m, n, vvTemp);


	return 0;
}

이문제 풀 때 점화식은
dp[i][j] = (dp[i][j - 1] + dp[i - 1][j])%1000000007;

for (int i = 1; i < n; i++)//y좌표
{
	for (int j = 1; j < m; j++)//x좌표
	{
		if (dp[i][j]==0) continue;
        이 식이 있는데,
        dp[i][j] = 0 일 때, 알아서 점화식에 0이 들어간다는걸 이해하는게 중요함.
        내가 약한 DP유형의 문제.
profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글