코딩테스트/백준

[BJ] 2798. 블랙잭

jhk828 2021. 2. 14. 03:15

[BJ] 2798. 블랙잭

www.acmicpc.net/problem/2798

 

2798번: 블랙잭

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

www.acmicpc.net

import java.io.*;
import java.util.*;
// 210211

public class Main_BJ_2798_블랙잭 {
	
	static int N, M;
	static int[] arr;
	static int max = 0;
	static boolean[] isSelected;
	
	static void permutation(int cnt, int L, int total) {
		if (total > M) return;
		
		if (cnt == 3) {
			max = Math.max(max, total);
			return;
		}
		
		if (L > N) return;
		
		for(int i=0; i<N; i++) {
			if (isSelected[i]) continue;
			
			isSelected[i] = true;
			permutation(cnt+1, L+1, total+arr[i]);
			
			isSelected[i] = false;
		}
		
	}
	
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		N = sc.nextInt();
		M = sc.nextInt();
		arr = new int[N];
		isSelected = new boolean[N];
		
		for(int i=0; i<N; i++) {
			arr[i] = sc.nextInt();
		}
		
		permutation(0, 0, 0);
		System.out.println(max);
	
		sc.close();
	}
}