인접하지 않는 최대 합 구하기
2021. 4. 26. 21:20ㆍAlgorithm/medium
한 배열안에 있는 인접하지 않는 숫자들의 최대합을 구하는 문제를 풀어보겠습니다.
여기서 인접하지 않는 가장 큰 최대합은 75, 120, 135입니다. 이를 구하기 위해서는 dp를 활용해야하는데 이전의 정보를 활용하면 편하게 진행할 수 있습니다.
array = [75, 105, 120, 75, 90, 135];
dp[i] = max(dp[i-1], dp[i-2] + array[i]);
각 dp의 배열은 현재 위치의 최대 값을 의미한다.
i는 현재의 위치를 의미하고 i-1은 이전의 최대값그리고 i-2는 한칸 띄어있는 위치의 최대 값이고 한칸 띄어져 있기 때문에 현재 위치의 배열 값을 더할 수 있다.
이전의 값은 붙어 있기 때문에 현재의 값을 더할 수 없기 때문에 위의 점화식을 사용하면 인접하지 않는 수를 더한 가장 큰 값을 더할 수 있다.
더보기
#include <vector>
using namespace std;
int maxSubsetSumNoAdjacent(vector<int> array) {
if(array.size() == 0)
return 0;
vector<int> dp(array.size(), 0);
dp[0] = array[0];
dp[1] = max(array[0], array[1]);
for(int i = 2; i < array.size(); i++){
dp[i] = max(dp[i-1], dp[i-2] + array[i]);
}
return dp.back();
}
'Algorithm > medium' 카테고리의 다른 글
레벤슈타인 거리 (0) | 2021.04.26 |
---|---|
특정 값을 이루는데 가장 적은 동전의 개수(Min Number Of Coins For Change) (0) | 2021.04.26 |
여러 수를 이용해서 목표하는 숫자를 만들 수 있는 방법(Number of ways to make change) (0) | 2021.04.26 |
가장 긴 팰린드롬 문자열 구하기 (0) | 2021.03.28 |
Reverse Words In String - medium (0) | 2021.03.28 |