✅ LV. 3
🔖 DP
dfs 로 구현
returndfs 탐색cnt++answer 에 최대 cnt 비교해서 저장dfs 탐색 들어가기 전에 탐색할 루트의 노드 숫자를 cnt 에 더해주고 탐색 이후에는 cnt 에서 그대로 빼주기솔직히 완전탐색과 다를 바 없어서 비효율 끝판왕
top-down 방식으로 했을 때, 무조건 최댓값으로만 더해간다고 해도 최종적인 최댓값이 나오는 것은 아니기 때문에 어떻게 해야할지 모르겠음
dp 에 저장dp 에 저장triangle 값)를 dp 에 저장dp 값들 중에서 최댓값을 answer 로 지정현재 층을 기준으로 다음 경로를 정하는 것이 아니라 현재 숫자가 최댓값을 가지려면 어떤 경로로 와야하는지 산출
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> triangle) {
int n = triangle.size() - 1;
int answer = 0;
int dp[501][501];
dp[0][0] = triangle[0][0];
for(int i = 1 ; i <= n ; i++) {
for(int j = 0 ; j <= i ; j++) {
if(j == 0) { // 첫번재 숫자
dp[i][j] = dp[i-1][j];
}
else if(j == i) { // 마지막 숫자
dp[i][j] = dp[i-1][j-1];
}
else {
dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]);
}
dp[i][j] += triangle[i][j];
}
}
// answer 산출
for(int i = 1 ; i <= n ; i++) {
if(dp[n][i] > answer) {
answer = dp[n][i];
}
}
return answer;
}