입력된 수열 중 임의의 3개를 뽑아 특정 수보다 작거나 같은 수 중 가장 큰 수를 return
그냥 냅다 다 찾으면 된다. 다만, 입력받은 수를 vector에 저장해서 sort한 다음 일정값보다 큰 경우 loop를 break하는 방법을 생각해보았으나, sort하는 시간이 더 걸릴 것 같아서 포기함
// link: https://www.acmicpc.net/problem/2798
#include <iostream>
#include <vector>
#include <algorithm>
int CalculateBlackJack(std::vector<int>& v, const int N, const int M){
//find answer
int answer = -1;
for (int i=0; i<N-2; ++i){
for (int j=i+1; j<N-1; ++j){
for (int k=j+1; k<N; ++k){
const int temp = v[i]+v[j]+v[k];
if ((temp <= M) && (temp > answer)){
answer = temp;
}
}
}
}
return answer;
}
int main(){
int N = 0;
std::cin >> N;
int M = 0;
std::cin >> M;
//make vector
std::vector<int> v(N, 0);
for (int i=0; i<N; ++i){
std::cin >> v[i];
}
std::cout << CalculateBlackJack(v, N, M) << std::endl;
return 0;
}