

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다.
합이 M을 넘지 않는 카드 3장을 찾을 수 있는 경우만 입력으로 주어진다.
첫째 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 출력한다.
값을 분리하기 위해 StringTokenizer를 선언해주었습니다.
삼중for문을 통해 배열을 전부 탐색하며 조건에 맞는 result값을 초기화시켜주었습니다.
이후엔 if문을 이용해 문제에 맞게 조건을 세우고, result값을 초기화해주면 됩니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int arr[] = new int[N];
st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
System.out.println(result(arr,N,M));
}
static int result(int[] arr, int N, int M){
int result = 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++){
int temp = arr[i]+arr[j]+arr[k];
if(M==temp){
return temp;
}
if(result < temp && temp < M){
result = temp;
}
}
}
}
return result;
}
}