문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/43105
문제 설명
위에서부터 맨 아래까지 내려오는데 오면서 값을 더하고 가장큰 값을 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
|
#include string
#include vector
#includealgorithm
using namespace std;
int solution(vectorvectorint triangle) {
int dp[505][505];
int size = triangle.size();
vectorint t;
dp[1][0] = triangle[0][0] + triangle[1][0];
dp[1][1] = triangle[0][0] + triangle[1][1];
for (int i = 2; i size; i++) {
int Size = triangle[i].size();
for (int j = 0; j Size; j++) {
맨왼쪽
if (j == 0) dp[i][j] = dp[i - 1][j] + triangle[i][j];
맨오른쪽
else if (j == Size - 1) dp[i][j] = dp[i - 1][j - 1] + triangle[i][j];
그 외 중간 부분
else
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1] )+ triangle[i][j];
}
}
마지막행에서 최대값을출력
int answer = 0;
int Size = triangle[size - 1].size();
for (int i = 0; i Size; i++) {
answer = max(dp[size - 1][i], answer);
}
return answer;
}
|
cs |
'c++ > 프로그래머스' 카테고리의 다른 글
프로그래머스 : 숫자야구 (0) | 2020.04.02 |
---|---|
프로그래머스 : 등굣길 (0) | 2020.04.02 |
프로그래머스 : 타일 장식물 (0) | 2020.04.02 |
프로그래머스: 단어변환 (0) | 2020.04.02 |
프로그래머스 : 네트워크 (0) | 2020.04.02 |