Brute Force : 무식한 힘. 즉, 계속해서 대입해가며 풀어가는 방법이다.
전체 카드(N)에서 3개를 고를 수 있는 경우의 수를 탐색하여 경우 별로 선택한 카드의 합을 모두 구한 뒤, 주어진 M을 넘지 않는 최댓값을 찾으면 된다.
3중 for문을 돌리면 간단하게 풀 수 있다.
방법은 여러가지가 있겠지만, 나는 Scanner 보다 속도가 빠른 BufferedReader를 사용하여 풀어보았다.
❗풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BJ_2798 {
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());
}
int result = search(arr, N, M);
System.out.println(result);
}
static int search(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++){
// sum 세개의 카드 합
int sum = arr[i] + arr[j] + arr[k];
if (M == sum){
return sum;
}
if (result < sum && sum < M){
result = sum;
}
}
}
}
return result;
}
}