

M 값과 차이가 가장 적으면서도 넘지 않는 값을 찾기 위해서는 모든 경우의 수를 일일이 대조(브루트포스)해봐야 한다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N,M;
scanf("%d %d", &N, &M);
int arr[N];
for (int i=0; i<N; i++) {
scanf("%d", &arr[i]);
}
int result = arr[0]+arr[1]+arr[2];
int diff = abs(M-result);
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++) {
int sum = arr[i]+arr[j]+arr[k];
if (diff > abs(M-sum) && sum<=M) {
diff = abs(M-sum);
result = sum;
}
}
}
}
printf("%d", result);
return 0;
}
N, M = map(int,input().split())
numlist = list(map(int,input().split()))
diff = abs(M-(numlist[0]+numlist[1]+numlist[2]))
for i in range(0,N):
for j in range(i+1,N):
for k in range(j+1,N):
sum = numlist[i]+numlist[j]+numlist[k]
if diff > abs(M-sum) and sum <= M:
diff = abs(M - sum)
result = sum
print(result)