※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 1932번 문제인 정수 삼각형이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/1932 

 

1932번: 정수 삼각형

첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.

www.acmicpc.net

대표적인 기본 DP 문제 중 하나이다.

 

삼각형의 각 숫자까지의 경로 중 수의 합이 가장 큰 경로는 그 수로 올 수 있는 이전 행의 숫자까지의 숫자의 합이 최대인 경로의 끝에 그 숫자를 붙이는 것으로 구할 수 있다. 이는 DP를 이용하여 쉽게 계산할 수 있다.

 

아래의 구현이 가능한 이유는 모든 숫자가 음이 아닌 정수이기 때문이다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int arr[501][501];

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    int N; cin >> N;
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= i; j++) {
            int x; cin >> x;
            arr[i][j] = max(arr[i - 1][j - 1], arr[i - 1][j]) + x;
        }
    }
    
    int ans = 0;
    for (int j = 1; j <= N; j++) {
        ans = max(ans, arr[N][j]);
    }

    cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 17080 // C++] 결함 게임  (0) 2021.08.25
[BOJ 2655 // C++] 가장높은탑쌓기  (0) 2021.08.24
[BOJ 2631 // C++] 줄세우기  (0) 2021.08.22
[BOJ 1695 // C++] 팰린드롬 만들기  (0) 2021.08.21
[BOJ 2482 // C++] 색상환  (0) 2021.08.20

+ Recent posts