
브루트포스 문제다.모든 카드 경우의 수를 따져봐야 한다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
int sum = sc.nextInt();
int[] card = new int[number];
sc.nextLine();
for(int i=0;i<number;i++){ // 카드값 입력 받음.
card[i] = sc.nextInt();
}
int result = search(card,number,sum);
System.out.println(result);
}
public static int search(int[] card,int number,int sum){ // 카드 3개를 합해주는 메서드
int result = 0; // 더한 값을 저장하는 변수
for(int i=0;i<number-2;i++){ // 모든 경우의 수를 대입하는 3중 for문.카드가 3개이기에 3개이고 2를 뺀다.
for(int j=i+1;j<number-1;j++){
for(int k=j+1;k<number;k++){
int temp = card[i] + card[k]+card[j];
if(result<temp && temp<=sum){ // sum에 가장 가까운 합을 구하는 코드이다.
result =temp;
}
}
}
}
return result;
}
}
search 메서드가 핵심이다.for문 3개를 돌려서 모든 경우의 수를 다 조합하는게 중요하다.뽑는 카드가 3장이라 3중 for문이며 3장이기에 2를 뺀다.
카드 3장을 더한 값이 result보다 크고 sum보다 같거나 작을시 더해준다.
모든 경우의 수를 다 따져보는 코드를 짜는게 어려운거 같다.