코딩테스트 문제풀이

[백준 2798] 블랙잭

지잉지잉 2021. 10. 6. 22:21

문제

 

풀이

import java.util.Scanner;

public class Main {
	static int max = 0;
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int m = scanner.nextInt();
		int[] cards = new int[n];
		for (int i = 0; i < n; i ++) {
			cards[i] = scanner.nextInt();
		}
		scanner.close();
		
		boolean[] used = new boolean[n];
		permutation(cards, new int[3], 0, used, m);
		System.out.println(max);
	}
	
	public static void permutation(int[] cards, int[] selectedCards, int selectedCount, boolean[] used, int m) {
		if (selectedCount == 3) {
			int sum = 0;
			for (int card : selectedCards) {
				sum += card;
			}
			
			if (m >= sum && sum > max) {
				max = sum;
			}
			return;
		}
		
		for (int i = 0; i < cards.length; i++) {
			if (!used[i]) {
				used[i] = true;
				selectedCards[selectedCount] = cards[i];
				permutation(cards, selectedCards, selectedCount + 1, used, m);
				
				used[i] = false;
			}
		}
	}
}
  • dfs를 이용한 완전탐색, 모든 3개 뽑는 경우의 수를 구했다.