본문 바로가기
Programming/Algorithm

백준 알고리즘 2798번 블랙잭 문제 JAVA

by 하하호호 2022. 2. 25.
반응형

 

 

 

백준 알고리즘 2798번은 모든 경우의 수를 생각하는 브루트 포스 문제다. 자바로 알고리즘을 만들어보자.

 

 

입력값은 n과 m이 주어진다.

n은 카드의 갯수이며, m은 카드의 조합으로 가장 가까운 수를 맞춰야 하는 수다.

 

 

문제의 핵심은 모든 경우의 수를 생각한다는 것이다.

문제에서는 카드를 3장 뽑을 수 있게 되어 있다. 

 

처음 선택가능한 카드는 n장이다.

두번째 선택 가능한 카드는 n-1장이다.

마지막으로 선택 가능한 카드는 n-2장이다.

먼저 입력값을 받아와서, 3번의 for문을 순회하면서 모든 경우의 수를 조회해보는 것이다.

 

3장의 카드값을 뽑아서, max값을 구하는 로직을 계속 순회한다.

for문이 종료되면 max값에는 m값과 가장 근사한 값이 할당되어 있다.

출력하면 로직은 끝이난다.

 

JAVA CODE

import java.util.ArrayList;
import java.util.Scanner;

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

        String [] NM = inputValue.nextLine().split(" ");
        int n = Integer.parseInt(NM[0]);
        int m = Integer.parseInt(NM[1]);
        int [] cardValueList=new int[n];
        for(int i=0; i<cardValueList.length; i++){
            cardValueList[i]=inputValue.nextInt();    
        }

        ArrayList<Integer> card = new ArrayList<Integer>();

        for(int num:cardValueList){
            card.add(num);
        }

        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++){
                    int sum=card.get(i)+card.get(j)+card.get(k);
                    if(sum <= m){
                        max=Math.max(sum, max);
                    }
                    }
                }
            }
        

        System.out.println(max);
    }
}

 

반응형

댓글