메모
/*
조건 1 : N 장 中 3장 고르기 (N : 바닥에 깔린 카드들) (3 ≤ N ≤ 100)
조건 2 : 고른 카드의 합 < M (M : 딜러가 외친 숫자) (10 ≤ M ≤ 300,000)
조건 3 : 조건 2 中 가장 큰 수
카드 3장의 합은?
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt(); // 전체 카드
int M = in.nextInt(); // 딜러가 외친 숫자
int[] arr = new int[N];
for (int i = 0; i < N; i++) { // arr 배열에 전체 카드를 담는다
arr[i] = in.nextInt();
}
int result = search(arr, N, M); // search() 메소드 실행
System.out.println(result);
}
// 탐색
static int search(int[] arr, int N, int M) {
int result = 0; // 카드 3장의 합을 저장해두는 변수
for (int i = 0; i < N - 2; i++) { // 3개를 고르기 때문에 첫번째 카드는 N - 2 까지만 순회
for (int j = i + 1; j < N - 1; j++) { // 두 번째 카드는 첫 번째 카드 다음부터 N - 1 까지만 순회
for (int k = j + 1; k < N; k++) { // 세 번째 카드는 두 번째 카드 다음부터 N 까지 순회
int sum = arr[i] + arr[j] + arr[k]; // 카드 3개의 합
// M == 카드의 합 일 경우, sum 을 리턴 -> 구하고자 했던 값이 아님
if (M == sum) {
return sum;
}
// 이전 카드의 합 < 세 카드의 합 && 세 카드의 합 < M 일 경우
if (result < sum && sum < M) {
result = sum; // result 갱신
}
}
}
}
return result;
}
}
참고: [백준] 2798번 : 블랙잭 - JAVA [자바]