https://www.acmicpc.net/problem/2798
N장의 카드 중 3장의 카드를 고른다.M을 넘지 않으면서 최대한 가깝게 만들어 출력브루트 포스(Brute-Force) 문제입니다.
모든 카드를 탐색하여 3장씩 골라 m을 넘지 않는 값들 중 최댓값을 찾으면 됩니다.
import java.util.*;
import java.io.*;
public class Main {
static int n, m, answer;
static int[] cards;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
cards = new int[n];
for (int i = 0; i < n; i++) {
cards[i] = Integer.parseInt(st.nextToken());
}
answer = 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++) {
if (cards[i] + cards[j] + cards[k] > m) continue;
answer = Math.max(answer, cards[i] + cards[j] + cards[k]);
}
}
}
System.out.println(answer);
}
}