카드의 개수 n이 최대 100의 크기를 가지므로 n^3을 해도 시간제한에 걸리지 않는다.
알고리즘에서 1초란 연산을 1억번 정도 수행할 수 있다는 것을 의미하며
O(n^3)의 시간복잡도를 가져도 100만으로 1초 안에 수행할 수 있다.
따라서 브루트포스(완전탐색)으로 풀 수 있는 문제이다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, m, sum = 0, ans = 0;
cin >> n >> m;
vector<int> V(n);
for (int i = 0; i < n; ++i)
cin >> V[i];
for (int i = 0; i < V.size() - 2; ++i)
{
for (int j = i + 1; j < V.size() - 1; ++j)
{
for (int k = j + 1; k < V.size(); ++k)
{
sum = V[i] + V[j] + V[k];
if (m >= sum && sum >= ans)
ans = max(ans, sum);
}
}
}
cout << ans;
}