장훈이의 높은 선반


SW Expert Academy 6019: 장훈이의 높은 선반

문제보기
Alt text

풀이

  • 부분집합 이용

소스코드

import java.util.Scanner;

public class Solution {
	static int N;
	static int B;
	static int[] arr;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		for (int tc = 1; tc <= T; tc++) {
			N = sc.nextInt(); // 점원들의 수
			B = sc.nextInt(); // 선반의 높이
			arr = new int[N];
			min=Integer.MAX_VALUE;
			for (int i = 0; i < N; i++) {
				arr[i] = sc.nextInt();
			}

			// 부분집합으로 탑 만들기
			powerset(arr, 0, new boolean[arr.length]);
			int ans = min - B;
			System.out.println("#"+tc+" "+ans);
		}
	}
	static int min;
	static void powerset(int[] arr, int idx, boolean[] sel) {
		if (idx == arr.length) {
			int sum = 0;
			for (int i = 0; i < arr.length; i++) {
				if (sel[i]) {
					sum += arr[i];
				}
			}
			if(sum>=B) {
				if(sum<min)
					min = sum;
			}
			return;
		}
		sel[idx] = false;
		powerset(arr, idx + 1, sel);
		sel[idx] = true;
		powerset(arr, idx + 1, sel);
	}
}