ALGORITHM

[JAVA] 백준 18429번- 근손실

연듀 2022. 8. 27. 21:08

https://www.acmicpc.net/problem/18429

 

18429번: 근손실

웨이트 트레이닝을 좋아하는 어떤 대학원생은, 현재 3대 운동 중량 500의 괴력을 소유하고 있다. 다만, 하루가 지날 때마다 중량이 K만큼 감소한다. 예를 들어 K=4일 때, 3일이 지나면 중량이 488로

www.acmicpc.net

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static int n, k, answer;
    static int[] arr;
    static boolean[] visit;
    //static int[] ansArr;
    // public static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        k = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(br.readLine());
        arr = new int[n];
        // ansArr = new int[n];
        for(int i=0; i<n; i++){
            arr[i]=Integer.parseInt(st.nextToken());
        }
        visit=new boolean[n];
        answer=0;
        dfs(500, 0);
        System.out.println(answer);
        // System.out.println(sb);
    }

    public static void dfs(int sum, int cnt){
        if(cnt == n){
            answer++;
            // for(int val:ansArr) sb.append(val).append(" ");
            // sb.append("\n");
            return;
        }
        for(int i=0; i<n; i++){
            if(!visit[i] && sum+arr[i]-k >= 500) {
                visit[i]=true;
                // ansArr[cnt]=i+1;
                dfs(sum+arr[i]-k, cnt+1);
                visit[i]=false;
            }
        }
    }
}