관리 메뉴

fatalite

정수삼각형 - 백준 1932 본문

코딩 인터뷰/C++

정수삼각형 - 백준 1932

fataliteforu 2023. 4. 4. 09:08

Info

실버 1, 다이나믹 프로그래밍


Solution

#include <iostream>
#include <vector>

using namespace std;
int n;
vector<vector<int>> triangle;
vector<vector<int>> maxTriangle;
int findMax(int depth, int OrderNumber) {
    if (n == 1) {
        return triangle[0][0];
    }
    if (n == 2) {
        return triangle[0][0] + max(triangle[1][0], triangle[1][1]);
    }
        if (depth == n - 2) {
            return triangle[depth][OrderNumber]
                + max(triangle[depth + 1][OrderNumber],
                    triangle[depth + 1][OrderNumber + 1]);
        }
        int left = 0;
        int right = 0;
        if (maxTriangle[depth+1][OrderNumber] != -1) {
            left = maxTriangle[depth + 1][OrderNumber];
        }
        else {
            left = findMax(depth + 1, OrderNumber);
        }
        if (maxTriangle[depth + 1][OrderNumber+1] != -1) {
            right = maxTriangle[depth + 1][OrderNumber + 1];
        }
        else {
            right = findMax(depth + 1, OrderNumber + 1);
        }

        int TriangleMax = triangle[depth][OrderNumber]
            + max(left, right);
        maxTriangle[depth][OrderNumber] = TriangleMax;
        return TriangleMax;
}
int main()
{
    cin >> n;
   
    //input
    for (int depth = 0; depth < n; depth++) {
        vector<int> line;
        vector<int> maxLine;
        for (int length = 0; length < (depth + 1); length++) {
            int tmp;
            cin >> tmp;
            line.push_back(tmp);
            maxLine.push_back(-1);
        }
        maxTriangle.push_back(maxLine);
        triangle.push_back(line);
    }
    cout << findMax(0,0);


}

'코딩 인터뷰 > C++' 카테고리의 다른 글

☆ 스티커 - 백준 9465  (1) 2023.04.09
트리 순회 - 백준 1991  (0) 2023.04.08
N과 M(1) - 백준 15649  (0) 2023.02.27
N과 M(6) - 백준 15655  (0) 2023.02.26
N과 M(4) - 백준 15652  (0) 2023.02.26