✅ LV. 3
🔖 DP
dfs
로 구현
return
dfs
탐색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;
}