땅따먹기

108번뇌·2021년 9월 7일
0

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

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<vector<int> > land)
{
	int answer = 0;

	int Row = land.size();
	int Col = land[0].size();
	vector<vector<int>> dp(Row, vector<int>(Col, 0));

	for (int i = 0; i < Col; i++)
	{
		dp[0][i] = land[0][i];
	}//맨처음 줄 시작으로 깔고 시작한다.

	for (int i = 1; i < Row; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			for (int k = 0; k < 4; k++)
			{
				if (j == k)  continue;
				else
				{
					dp[i][j] = max(dp[i - 1][k] + land[i][j], dp[i][j]);//더 큰 값으로 업데이트 한다. 
				}
			}
		}
	}

	int Max(0);
	for (int i = 0; i < Col; i++)
	{
		Max = max(dp[Row - 1][i], Max);//마지막열중 제일 큰 값 가져온다. 
	}

	return Max;
}

여기서 이 부분이 핵심이다.


for (int j = 0; j < 4; j++)
		{
			for (int k = 0; k < 4; k++)
			{
				if (j == k)  continue;
				else
				{
					dp[i][j] = max(dp[i - 1][k] + land[i][j], dp[i][j]);//더 큰 값으로 업데이트 한다. 
				}
			}
		}

이해하기.

profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글