반응형
문제
풀이
지금까지의 경로의 합 중 최댓값을 저장해놓은 배열을 DP라고 선언합니다.
DP는 다음과 같은 규칙을 따릅니다.
1. 줄의 첫 칸 일 경우 : 자신의 DP값 = 전 줄의 첫 칸의 DP값 + 자신의 값
2. 줄의 마지막 칸 일 경우 : 자신의 DP값 = 전 줄의 마지막 칸(j-1)의 DP값 + 자신의 값
3. 그 외의 경우 : 자신의 DP값 = 전 줄의 j-1, j번째 DP값 충 더 큰 값 + 자신의 값
삼각형의 값은 0이상이므로 마지막 줄인 경우에만 최댓값을 갱신해주면 됩니다.
소스 코드
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
|
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int dp[501][501];
int solution(vector<vector<int>> triangle) {
int answer = 0;
dp[0][0] = triangle[0][0];
// 삼각형 2째줄부터 탐색
for (int i = 1; i < triangle.size(); i++) {
for (int j = 0; j < triangle[i].size(); j++) {
// 첫 칸
if (j == 0) {
dp[i][j] += dp[i - 1][j] + triangle[i][j];
}
// 마지막 칸
else if (j == triangle[i].size() - 1) {
dp[i][j] += dp[i - 1][j - 1] + triangle[i][j];
}
// 중간 칸
else {
int temp = max(dp[i - 1][j - 1], dp[i - 1][j]);
dp[i][j] += temp + triangle[i][j];
}
// 마지막 줄이라면 최댓값 갱신
if (i == triangle.size() - 1) {
answer = max(answer, dp[i][j]);
}
}
}
return answer;
}
|
cs |
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 132265] 롤케이크 자르기 C++ (0) | 2022.11.18 |
---|---|
[프로그래머스 131127] 할인 행사 C++ (0) | 2022.11.04 |
[프로그래머스 42898] 등굣길 C++ (0) | 2021.11.20 |
[프로그래머스 43162] 네트워크 C++ (0) | 2021.11.19 |
[프로그래머스 43165] 타겟 넘버 C++ (0) | 2021.11.19 |