문제 링크

요약

최종

#include <string>
#include <vector>
 
using namespace std;
 
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MIN_I32 (0x80000000)
 
int solution(vector<vector<int>> triangle) {
	int max = MIN_I32;
 
	if (triangle.size() == 1) {
		return triangle[0][0];
	}
 
	for (int i = 1; i < triangle.size(); i++) {
		for (int j = 0; j < triangle[i].size(); j++) {
			if (j == 0) {
				triangle[i][j] += triangle[i - 1][j];
			} else if (j + 1 == triangle[i].size()) {
				triangle[i][j] += triangle[i - 1][j - 1];
			} else {
				triangle[i][j] += MAX(triangle[i - 1][j], triangle[i - 1][j - 1]);
			}
		}
	}
 
	for (auto t : triangle.back()) {
		max = MAX(max, t);
	}
 
	return max;
}