정수 삼각형

108번뇌·2021년 7월 22일
0

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

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<vector<int>> triangle) {
	int answer = -1;
	vector<vector<int>> dp(triangle.size(), vector<int>(triangle.size()));

	dp[0][0] = triangle[0][0];

	for (int i = 1; i < triangle.size(); i++)
	{
		for (int j = 0; j <= i; j++)
		{
			if (j == 0)			dp[i][j] = dp[i - 1][j] + triangle[i][j];
			else if(j==i)		dp[i][j] = dp[i-1][j-1] + triangle[i][j];
			else
			{
				dp[i][j] = max(dp[i - 1][j - 1] + triangle[i][j], dp[i - 1][j] + triangle[i][j]);
			}

			if (i == triangle.size() - 1)	answer = max(answer, dp[i][j]);
		}
	}

	return answer;
}

점화식 :
1. dp[0][0]일 땐 삼각형 맨 꼭대기;
2. 삼각형 맨 좌측일때 dp = 바로 위에 dp + 현재줄 triangle값
3. 삼각형 맨 우측일때 dp = 좌측 대각선 위에 dp + 현재줄 triangle값
4. 나머지 경우 : max(현재줄 triangle값 + 좌측상단 dp / 현재줄 triangle값 + 우측상단 dp)

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

0개의 댓글