https://school.programmers.co.kr/learn/courses/30/lessons/43105
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
#1 위->아래
#include <string>
#include <vector>
using namespace std;
int dp[501][501];
int solution(vector<vector<int>> triangle) {
dp[0][0] = triangle[0][0];
int n = triangle.size();
for (int y = 0; y < n - 1; ++y) {
for (int x = 0; x < triangle[y].size(); ++x) {
dp[y + 1][x] = max(dp[y + 1][x], dp[y][x] + triangle[y + 1][x]);
dp[y + 1][x + 1] = max(dp[y + 1][x + 1], dp[y][x] + triangle[y + 1][x + 1]);
}
}
int maxi = -1;
for (int x = 0; x < 501; ++x) {
if (maxi < dp[n - 1][x]) {
maxi = dp[n - 1][x];
}
}
return maxi;
}
int main() {
solution({ {7},{3,8},{8,1,0},{2,7,4,4} ,{4,5,2,6,5} });
}
#2 아래->위
#include <string>
#include <vector>
using namespace std;
int dp[501][501];
int solution(vector<vector<int>> triangle) {
dp[0][0] = triangle[0][0];
int n = triangle.size();
for (int y = 1; y < n; ++y) {
for (int x = 0; x < triangle[y].size()-1; ++x) {
dp[y][x] = max(dp[y][x], dp[y-1][x] + triangle[y][x]);
dp[y][x + 1] = max(dp[y][x + 1], dp[y-1][x] + triangle[y][x + 1]);
}
}
int maxi = -1;
for (int x = 0; x < 501; ++x) {
if (maxi < dp[n - 1][x]) {
maxi = dp[n - 1][x];
}
}
return maxi;
}
int main() {
solution({ {7},{3,8},{8,1,0},{2,7,4,4} ,{4,5,2,6,5} });
}'프로그래머스 > 코딩테스트' 카테고리의 다른 글
| lv2) 혼자 놀기의 달인 (1) | 2026.07.06 |
|---|---|
| (lv2) [3차] 파일명 정렬 [todo: 깔끔한 코드로 정리] (0) | 2026.06.28 |
| lv2 ) 완전범죄(틀림) 그리디 vs DP (0) | 2026.06.19 |
| lv2) 멀리 뛰기 (0) | 2026.06.16 |
| 비트마스킹 관련 연습 (7다) (0) | 2026.06.03 |
