브론즈 문제인데 체감 난이도는 좀 더 높았다. 다른 문제긴 한데 라피신 할 때 풀었던 문제에서 영감을 받아서 비슷한 방식으로 풀었다.
삼중반복문 사용해서 서로 다른 세개의 카드를 더한 모든 경우의 수를 찾고 그 중 조건에 맞을 때 min값을 변경했다. min값이 변경될 때마다 정답이 바뀌고 가장 min값이 작을 때(혹은 0일 때)의 정답을 출력하도록 했다.
42 동기들끼리 모였을 때 라피신 문제들 난이도가 백준 몇티어 정도 되는지 얘기했었는데 며칠을 애먹어가며 푼 문제가 골드~플레티넘 정도 됐었다. 동기들 없이 혼자 공부하는 요즘은 실버1~2 문제만 혼자 해결해도 자랑스러워서 어깨가 막 올라간다ㅎㅎ... 새삼 동료학습이 대단했음을 느낀다.
#include <iostream>
using namespace std;
int main()
{
int n, sum, max, min, ans;
int arr[101];
min = 300001;
cin >> n >> max;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
sum = 0;
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++)
{
sum = arr[i] + arr[j] + arr[k];
if (max - sum < min && max - sum >= 0)
{
min = max - sum;
ans = sum;
}
}
}
}
cout << ans << endl;
return 0;
};