www.acmicpc.net/problem/1932

 

1932번: 정수 삼각형

문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최�

www.acmicpc.net


  • 임의의 정수들 중 각자 위치의 최댓값은, 연결된 부모 2개 값들 중 최댓값 + 자신의 값 이 된다.
  • 첫 줄 부터 자기 위치의 최댓값을 갱신하면서 n 번째 줄 까지 내려가면, n 번째 줄에는 가능한 모든 최댓값들이 들어가게 된다.
  • 다만 양쪽 끝 위치는 부모가 1개씩밖에 없기 때문에 따로 처리해야 하지만, 0 이 있다고 생각함으로써 똑같이 처리할 수 있다.
  • 1차원 배열로 부모 자식 간의 연결 관계를 깔끔하게 처리하는 인덱싱 방법이 있다면 메모리를 더 효율적으로 사용할 수 있겠다.

#include <iostream>
#include <algorithm>

using namespace std;

int n, temp, _max;
int data[500][500];                     // 맨 왼쪽과 맨 오른쪽 역시 부모 값을 0 으로 줌

int main(void)
{
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    cin >> n;

    for(int idx = 1 ; idx <= n ; idx++)
    {
        for(int i = 1 ; i <= idx ; i++)
        {
            cin >> temp;
            data[idx][i] = max(data[idx-1][i-1], data[idx-1][i]) + temp;    // 자기 위의 두 값들 중 최댓값을 골라서 더해줌
            if(data[idx][i] > _max) _max = data[idx][i];                    // 최댓값 갱신
        }
    }
    cout << _max << endl;
}

'PS > BOJ' 카테고리의 다른 글

[백준] 15666.cpp : N과 M (12)  (0) 2020.08.05
[백준] 1991.cpp : 트리 순회  (0) 2020.08.04
[백준] 1629.cpp : 곱셈  (0) 2020.07.31
[백준] 1149.cpp : RGB거리  (0) 2020.07.30
[백준] 15663.cpp : N과 M (9)  (0) 2020.07.29

+ Recent posts