백준 2798번 블랙잭(Java)

구할수 있는 모든 경우의 수를 구해, 그 수중에서 목표인 수에 가장 가까운 수를 출력하는 문제.

반복문으로 n번째 카드를 기준으로 삼고 그 카드를 더할수 있는 모든 경우의 수를 더해 배열에 저장후, 목표값과 가장 가까운 수를 출력하도록 했다.

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int card_num=scanner.nextInt();
        int[] card_list=new int[card_num];
        List<Integer> card_sum=new ArrayList<>();
        int target=scanner.nextInt();
        int min=9999999;
        int answer=0;

        for(int i=0;i<card_num;i++){
            card_list[i]=scanner.nextInt();
        }

        for(int i=0;i<card_num;i++){
            for(int j=i+1;j<card_num;j++){
                for(int z=j+1;z<card_num;z++){
                    card_sum.add(card_list[i]+card_list[j]+card_list[z]);
                }
            }
        }

        for(int i=0;i<card_sum.size();i++){
            int num=target-card_sum.get(i);
            if(num<0)
                num=-1*num;
            if(num<min) {
                min = num;
                answer=i;
            }
        }

        System.out.println(card_sum.get(answer));
    }
}