문제 링크입니다: https://www.acmicpc.net/problem/2798
재귀를 이용하여 완전탐색을 해주면 되는 문제였습니다.
기저 사례만 잘 작성해준다면 크게 어려운 점은 없는 것 같습니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N, M;
int result;
vector<int> v;
void sumOfCards(int idx, int cnt, int sum)
{
//조건 만족할 경우
if (cnt == 3 && sum <= M)
{
result = max(result, sum);
return;
}
//기저 사례
if (idx >= N || cnt > 3 || sum > M)
return;
//해당 카드 선택
sumOfCards(idx + 1, cnt + 1, sum + v[idx]);
//해당 카드 선택 X
sumOfCards(idx + 1, cnt, sum);
}
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
v.resize(N);
for (int i = 0; i < N; i++)
cin >> v[i];
sumOfCards(0, 0, 0);
cout << result << "\n";
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 2823번 유턴 싫어 (4) | 2018.09.18 |
---|---|
백준 2847번 게임을 만드는 동준이 (0) | 2018.09.18 |
백준 1159번 농구 경기 (0) | 2018.09.18 |
백준 11775번 SLON (4) | 2018.09.18 |
백준 2879번 코딩은 예쁘게 (0) | 2018.09.18 |