[백준] 2798번 블랙잭 - Java[브루트포스]
문제 출처
https://www.acmicpc.net/problem/2798
※ 풀이
블랙잭게임처럼 딜러가 부른 숫자와 가장 근접한 숫자가 나오도록
카드 3장을 뽑는 문제이다.
일단 카드 갯수인 n 의 범위가 그렇게 크지 않기때문에(100장)
모든 경우의 수를 다 돌려보는 브루트포스 알고리즘으로도 충분히 풀 수 있게 된다.
필자의 경우 재귀호출로 풀었다.
※ 소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] strings = br.readLine().split(" ");
int n = Integer.parseInt(strings[0]);
int m = Integer.parseInt(strings[1]);
int[] data = new int[n];
String[] split = br.readLine().split(" ");
for (int i = 0; i < split.length; i++) {
data[i] = Integer.parseInt(split[i]);
}
int answer = go(0, 0, 0, data, m);
System.out.println(answer);
}
static int go(int count, int sum, int nowIndex, int[] data, int m) {
//불가능한 경우
if (sum > m) {
return -1;
}
//3개가 된 경우
else if (count == 3) {
return sum;
}
else if (nowIndex >= data.length) {
return -1;
}
// 재귀 호출
else {
int answer = 0;
//더하는 경우
int a1 = go(count + 1, sum + data[nowIndex], nowIndex + 1, data, m);
//안더하는경우
int a2 = go(count, sum, nowIndex + 1, data, m);
answer = Math.max(a1, a2);
return answer;
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 10816번 숫자 카드2 - Java (0) | 2021.06.09 |
---|---|
[백준] 9012번 괄호 - Java[스택] (0) | 2021.06.09 |
[백준] 1439번 뒤집기 - Java[그리디 알고리즘] (0) | 2021.06.07 |
[백준] 14470번 전자레인지 - Java[구현] (0) | 2021.06.07 |
[백준] 1697번 숨바꼭질 - Java[BFS] (0) | 2021.06.07 |