알고리즘

[JAVA] 백준 2798번 블랙잭

멋쟁이개굴이 2020. 2. 4. 14:54
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt();
		int M = sc.nextInt();
		
		int[] cards;
		
		cards = new int[N];
		
		for(int i = 0; i < N; i++) {
			cards[i] = sc.nextInt();
		}
		
		sc.close();
		
		int max = 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++) {
					if(cards[i] + cards[j] + cards[k] <= M) {
						if(max < cards[i] + cards[j] + cards[k]) {
							max = cards[i] + cards[j] + cards[k];
						}
					}
				}
			}
	   	}
		System.out.println(max);		
    }
}

블랙잭을 변형한 게임으로

입력창의 첫째줄은 카드의 개수(N) , 카드들의 최대값(M) 을 입력하고

둘째줄은 카드의 개수(N)만큼 임의의 숫자들을 입력한다.

카드들 중 세개의 카드의 합이 최대값(M)에 가장 가까운 수를 구하는 문제이다.

 

for문을 세번 반복하여 모든 경우의 수를 구한다.

이를 브루트포스(Brute Force) 알고리즘 이라고 한다.

 

아래의 링크가 매우 도움이 되었다!

https://parkhyeokjin.github.io/algorithm/2019/09/05/baekjoon-2798.html

 

결과 :