글 작성자: 취업중인 피터팬
728x90

https://www.acmicpc.net/problem/2798

 

2798번: 블랙잭

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장

www.acmicpc.net

 

문제 설명

 

모든 경우의 수를 다 살펴봐야 하는 브루트 포스 알고리즘 문제입니다.

 

문제 풀이

 

해당 카드를 모두 더 해보고 원하는 숫자와 가장 가까운 숫자를 찾아야 합니다.

3가지 카드로 구성해라 했으니 for문을 3개를 돌려야 할 것입니다. 그래야 3가지 카드를 모두 더한 값을 구할 수있으니깐요.

첫 반복문은 첫 카드부터 두 번째 반복문은 첫 반복문의 다음 카드부터 세 번째 반복문은 두 번째 반복문의 다음 카드부터 반복합니다. 그러면 모두 빠짐없이 더한 값을 비교할 수 있습니다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int cardNum = sc.nextInt();
        int blackJack = sc.nextInt();
        int[] card = new int[cardNum];
        int nextResult = 0;
        int result = 0;

        for(int i=0; i<card.length; i++){
            card[i] = sc.nextInt();
        }

        for(int i=0; i<card.length; i++){
            for(int j=i+1; j<card.length; j++){
                for(int k=j+1; k<card.length; k++){
                    nextResult = card[i] + card[j] + card[k];
                    if(result < nextResult && nextResult <= blackJack){
                        result = nextResult;
                    }
                }
            }
        }

        System.out.println(result);

    }
}