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[] cardList = new int[N];
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < cardList.length; i++) {
cardList[i] = Integer.parseInt(st.nextToken());
}
System.out.println(searchCard(cardList, N, M));
}
public static int searchCard(int[] array, 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 = array[i] + array[j] + array[k];
if (M == temp) return temp;
if (result < temp && temp < M) result = temp;
}
}
}
return result;
}
}
브루트포스 알고리즘의 첫 문제를 풀어보았다.
브루트포스 개념은 학부생때 보안 수업에서 취약점 도구 수업 때 사용해봐서 이해하고있었는데 자바에서는 막상 어떻게 구현하나 싶었는데 이름답게 무작정 돌리는 듯 싶다.
물론 이 안에서도 몇가지 경우의 수를 생각해서 시간 복잡도가 매우 달라지겠으나
이번 문제 자체는 경우가 발생할 곳이 적어서 많은 로직이 들어가면 오히려 더 시간이 걸릴듯하다.