장훈이의 높은 선반
in Algorithm on SW Expert Academy
SW Expert Academy 6019: 장훈이의 높은 선반
풀이
- 부분집합 이용
소스코드
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);
}
}