블랙잭
05 July 2019
문제 : https://www.acmicpc.net/problem/2798
이번은 카드를 고르는 모든 경우를 고려하는 문제를 풀어보도록 하겠습니다.
import java.util.Scanner;
public class Main {
private static int[] arr;
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
int targetNum = sc.nextInt();
arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = sc.nextInt();
}
int maxNum = getMaxNum(size, targetNum);
System.out.println(maxNum);
}
private static int getMaxNum(int size, int targetNum) {
int maxNum = 0;
for (int i = 0; i < size; i++) {
for (int k = i + 1; k < size; k++) {
for (int m = k + 1; m < size; m++) {
int val = arr[i] + arr[k] + arr[m];
if (val == targetNum) {
return val;
} else if (val < targetNum && val > maxNum) {
maxNum = val;
}
}
}
}
return maxNum;
}
}
이번은 모든 수를 대입하는 방식인 브루트포스를 이용해 문제를 풀어보도록 하겠습니다.주어진 값들 중에서 3개를 뽑는 모든 방식이므로, for문을 세개를 겹쳐서 풀이가 가능합니다.
가장 처음 수부터, 그 다음 수는 처음 수의 다음번째 수, 그 다음 수는 그 다음번째의 다음번째 수부터 시작하여 마지막까지 조회를 하도록 합니다.
중간에 targetNum와 같은 수가 나오게 되면 멈추고, 조회 중에는 targetNum보다 작고, 현재 max인 값보다 큰 경우를 저장해서 이어갑니다.