문제 풀이/Programmers 문제 풀이
[Programmers]#Level3_정수 삼각형, DP, 동적 프로그래밍, 동적 계획법
Hardii2
2023. 11. 23. 20:24
[Programmers 알고리즘, C++]#Level 3_정수 삼각형
Programmers 알고리즘 문제 풀이, Level3_정수 삼각형
DP를 활용하는 문제
Overview
- 문제
- 풀이
- 코드
#1. 문제
#2. 풀이
1. 동적 계획법
[알고리즘]#5_동적 계획법
[알고리즘]#5_동적 계획법 동적 계획 알고리즘에 대해 알아보겠습니다. Overview 개념 예제 #0. 개념 1. 동적 계획법(Dynamic Programming) 동적 계획법은 최적화 문제를 해결하는 데 사용되는 알고리즘 디
webddevys.tistory.com
- [정의] : 동적 계획법은 최적화 문제를 해결하는 데 사용되는 알고리즘 디자인 기법 중 하나입니다. 동적 계획법은 입력 크기에 따라 중복되는 하위 문제를 재귀적으로 해결하고, 이 결과 값들을 기억하는 것으로 중복 계산을 피해 최적화를 수행하고 효율적으로 최적해를 찾아내는 알고리즘입니다.
- [Memoization] : Memoization은 동적 계획법의 한 종류로, 중복 계산을 방지하기 위해 이전의 결과 값들을 기억해 두어 재활용하는 방법입니다. 분할-정복 알고리즘과 비슷하지만, Memoization은 부분 문제의 해를 기억하여 중복 계산을 방지하는데 초점을 맞춥니다.
2. Bottom-Up
- 먼저, 삼각형의 가장 밑변에 위치하는 숫자들 중 서로 인접한 위치에 있는 숫자들끼리 더하며, 그 최대 값을 구합니다.
- Memoization을 통해 밑변부터 그 최대 값을 기억해두고, 삼각형의 밑변부터 꼭짓점까지 한 단계씩 올라가며, 최종적으로 가장 큰 최대 값을 구합니다.
#3. 코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<vector<int>> triangle) {
int answer = 0;
// 삼각형의 밑변부터, 주어진 2차원 벡터를 역순으로 순회
for(int i=triangle.size()-1; i>0; i--)
{
for(int j=0; j<i; j++)
{
triangle[i-1][j] += max(triangle[i][j], triangle[i][j+1]);
}
}
answer = triangle[0][0];
return answer;
}