[ 프로그래머스 ] 정수 삼각형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/43105
풀이
일정 패턴의 숫자 배열이 주어졌을 때, 맨 위에서 맨 아래까지 경로의 최대 합을 구하는 문제로, DP로 풀 수 있는 문제이다. 최대 합을 구하는 문제이므로, 순서대로 경로의 합을 더하고,위의 값 중 최대 값을 남겨 맨 아래에 도착했을 때의 가장 큰 수를 return한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <string>
#include <vector>
using namespace std;
int dp[10000][10000];
int solution(vector<vector<int>> triangle)
{
int answer = 0;
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][0] + triangle[i][j];
}
else if (j == i)
{
dp[i][j] = dp[i - 1][i - 1] + triangle[i][j];
}
else
{
dp[i][j] = max(dp[i - 1][j - 1] + triangle[i][j], dp[i - 1][j] + triangle[i][j]);
}
}
}
for (int i = 1; i < triangle.size(); i++)
{
for (int j = 0; j <= i; j++)
{
if (answer < dp[i][j])
{
answer = dp[i][j];
}
}
}
return answer;
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.