Triangle

ㅋㅋ·2022년 6월 13일
0

알고리즘-leetcode

목록 보기
10/135

정수 트리가 주어지고 루트부터 가장 마지막 리프 노드 까지 합쳤을 때

가장 작은 합을 구하는 문제

triangle을 안건드리려고 했지만, 속도를 높이려면 triangle에 sum 값을 넣어야 할 듯

class Solution {
public:
    int minimumTotal(vector<vector<int>>& triangle) {
        
        int triangleSize = triangle.size();
        
        vector<int> sum{};
        sum.push_back(triangle[0][0]);
        
        int levelSize{1};
        int count{1};
        for (int i = 1; i < triangleSize; i++)
        {
            levelSize = i + 1;
            
            for (int j = 0; j < levelSize; j++)
            {
                int value{INT_MAX};
                
                int left{j - 1};
                int right{j};
                
                if (0 <= left)
                {
                    int index = count - levelSize;
                    value = min(sum[index] + triangle[i][j], value);
                }

                if (right < levelSize - 1)
                {
                    int index = count - levelSize + 1;
                    value = min(sum[index] + triangle[i][j], value);
                }
                
                count++;
                sum.push_back(value);
            }
        }
        
        int result{INT_MAX};

        while (0 < levelSize)
        {
            result = min(sum[count - 1], result);

            count--;
            levelSize--;
        }
        
        return result;
    }
};

0개의 댓글