190429 SW Expert Academy(1486) 장훈이의 높은 선반

2019-04-29

1486. 장훈이의 높은 선반

문제 링크

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV2b7Yf6ABcBBASw

풀이 과정
  • 각 점원의 키를 합하거나-합하지 않거나 두 가지 경우의 수가 있다.
  • 모든 경우의 수를 수행해 본다->DFS
    • 직원 수가 20명이므로 모든 경우의 수를 수행해 보아도 시간초과X
import java.io.*;
import java.util.*;

class Solution{
    static int answer;
    static int[] arr;
    static int m,n,b;
    public static void sum(int now, int res){
        if(res>=b){
            if(answer>res-b)
                answer=res-b;
            return;
        }// 높이가 b이상인 탑 중 가장 높이가 낮은 경우를 구한다.
        if(now==n)
            return;
		sum(now+1, res+arr[now]);
        sum(now+1, res);
    }
    
	public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        m=Integer.parseInt(br.readLine());
        for(int j=1;j<=m;j++){
            String[] tmp=br.readLine().split(" ");
            n=Integer.parseInt(tmp[0]);
            b=Integer.parseInt(tmp[1]);
            answer=0;
            
            arr=new int[n];
            tmp=br.readLine().split(" ");
            for(int i=0;i<n;i++){
                arr[i]=Integer.parseInt(tmp[i]);
                answer+=arr[i];
            }
            sum(0, 0);
            System.out.println("#"+j+" "+answer);
        }
    }
}