쾌락없는 책임 (공부)/알고리즘 문제풀이

프로그래머스 Level3 - 정수 삼각형, C++

허스크 2021. 4. 26. 12:49
반응형
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int arr[501][501];

// 다음 외부 벡터에서 오른쪽 왼쪽 위치를 골라야 한다
// 인덱스가 같은게 왼쪽 1큰게 오른똑이다
// arr을 통해 dp

int solution(vector<vector<int>> triangle) {
    int answer = 0;
    int n = triangle.size();
    
    // 꼭짓점 값
    answer = arr[0][0] = triangle[0][0];
    
    for(int i = 1; i < n; i++){
        for(int j = 0; j <= i; j++){
            if(j == 0){
                arr[i][j] = arr[i-1][j] + triangle[i][j];
            }
            else if(j == i){
                arr[i][j] = arr[i-1][j-1] + triangle[i][j];
            }
            else {
                arr[i][j] = max(arr[i-1][j], arr[i-1][j-1]) + triangle[i][j];
            }
            
            answer = max(answer, arr[i][j]);
        }
    }
    return answer;
}

 이전에 이런 문제들을 많이 풀었기에 풀 수 있었던 문제입니다. arr 배열을 하나 더 만들어서 이곳에 삼각형 값들을 더하고 이 중에서 제일 큰 값을 점점 올리는 식입니다. 다른 사람들의 코드를 보니 기존의 배열 triangle을 이용해서 += 를 하는 방식으로 했는데 그 방식이 시간적으로, 공간적으로 더 나아 보입니다. 이후 개선의 여지가 있는 코드

반응형