문제 링크 : https://www.acmicpc.net/problem/2798
5 21
5 6 7 8 9
21
Bruteforcing 방식으로 풀이하는 문제이다.
Brute-Force : 완전탐색 알고리즘으로 볼 수 있다. 즉, 가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과만을 가져온다. 이 알고리즘의 강력한 점은 예외 없이 100%의 확률로 정답만을 출력한다.
받은 수를 배열에 저장하고 모든 경우의 수를 더해본다. 3개 수의 합이기 때문에 3중 반복문이 생성된다.
package Bruteforcing;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
//블랙잭
public class p2798 {
static int N;
static int M;
public static void main(String[] args)throws Exception{
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());
st = new StringTokenizer(br.readLine());
int number[] = new int[N+1];
for (int i=1; i<=N; i++){
number[i] = Integer.parseInt(st.nextToken());
}
int max= Integer.MIN_VALUE;
int sum=0;
//모두 한 번씩 돌아가면서 체크
for(int i=1; i<=N; i++){
for (int j=i+1; j<=N; j++){
for(int k=j+1; k<=N; k++){
sum = number[i]+ number[j]+ number[k];
if(sum<=M && max<sum){
//M을 넘지않고 최대인 수 구하기
max = sum;
}
}
}
}
System.out.print(max);
}
}
모든 경우의 수를 봐야하는 건가? 라는 생각을 하면서 시간을 좀 많이 썼던 것 같다. 데이터의 최대 크기가 크지 않아서 괜찮았는뎁.. ㅎㅎ..