https://www.acmicpc.net/problem/2798
입력으로 받은 숫자중에서 3개를 뽑아서 그 합이 최대값을 넘지 않는선에서 최대값을 구하는 문제이다.
앞선 문제 난쟁이 문제와 같이 3개의 카드를 뽑는데 재귀를 사용하였다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> cards;
vector<int> temp;
int visited[101];
int answer = -1;
int M, N; // 카드개수, max
int getCardSum()
{
int sum = 0;
for (int i = 0; i < temp.size(); i++)
{
sum += temp[i];
}
return sum;
}
void search()
{
if (temp.size() == 3)
{
int n = getCardSum();
if (n <= N)
{
answer = max(answer, n);
}
return;
}
for (int i = 0; i < cards.size(); i++)
{
if (!visited[i])
{
visited[i] = true;
temp.push_back(cards[i]);
search();
visited[i] = false;
temp.pop_back();
}
}
}
int main()
{
cin >> M >> N;
int n;
for (int i = 0; i < M; i++)
{
cin >> n;
cards.push_back(n);
}
search();
cout << answer;
}
'알고리즘 문제' 카테고리의 다른 글
[알고리즘 문제] 백준2178 - 미로탐색 (0) | 2020.08.23 |
---|---|
[알고리즘 문제] 백준14501 - 퇴사 (0) | 2020.08.22 |
[알고리즘 문제] 백준2309 - 일곱 난쟁이 (0) | 2020.08.22 |
[알고리즘문제] 프로그래머스 - 스킬 체크 테스트 level 1 (0) | 2020.04.18 |
[알고리즘문제] 프로그래머스 - N으로 표현 (0) | 2020.04.17 |