알고리즘/Programmers

[프로그래머스/C++] 정수 삼각형

chaeD2 2022. 6. 26. 21:39

(6/26 - O)

https://programmers.co.kr/learn/courses/30/lessons/43105

 

코딩테스트 연습 - 정수 삼각형

[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30

programmers.co.kr

 

생각보다 쉽게 풀려서 정말 기뻤던 문제!

 

 

구현

dp테이블을 이용하여 좌표마다 가질 수 있는 최댓값을 위에서 아래로 내려가면서 갱신해 준다. 가장 마지막 줄의 원소 값들 중 가장 큰 값을 리턴한다.

 

 

 

코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int dp[501][501];

int solution(vector<vector<int>> triangle) {
    int answer = 0;

    for (int i = 0; i < 501; i++) {
        fill(dp[i], dp[i] + 501, -1);
    }

    dp[0][0] = triangle[0][0];

    int i_size = triangle.size();
    for (int i = 1; i < i_size; i++) {
        int j_size = triangle[i].size();
        for (int j = 0; j < j_size; j++) {
            if(j - 1 >= 0)
                dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + triangle[i][j]);
            dp[i][j] = max(dp[i][j], dp[i - 1][j] + triangle[i][j]);
        }
    }
    
    answer = *max_element(dp[i_size - 1], dp[i_size - 1] + triangle[i_size - 1].size());

    return answer;
}

int main()
{
    vector<vector<int>> v;
    v.push_back({ 7 });
    v.push_back({ 3,8 });
    v.push_back({ 8,1,0 });
    v.push_back({ 2,7,4,4 });
    v.push_back({ 4,5,2,6,5 });

    solution(v);
}