Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

forDevLife

[백준] 2798 - 블랙잭 본문

알고리즘

[백준] 2798 - 블랙잭

JH_Lucid 2021. 6. 16. 16:40

브루트포스 - DFS로, 전체 겹치지 않는 부분집합(원소 3개)을 만들어 모두 비교해 봐야 한다.

DFS를 통해 겹치지 않는 원소의 집합 찾는 방법은 항상 유용하니 외우자.

import java.io.*;
import java.util.StringTokenizer;

public class Main {

    static int[] arr;
    static int[] tmp;
    static int max;
    static int M;

    public static void DFS(int L, int S) {
        if (L == 3) {
            int sum = 0;
            for (int i = 0; i < 3; i++) {
                sum += tmp[i];
            }
            if(sum <= M) {
                max = Math.max(max, sum);
            }
        } else {
            for (int i = S; i < arr.length; i++) {
                tmp[L] = arr[i];
                DFS(L + 1, i + 1);
            }
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        arr = new int[N];
        tmp = new int[3];
        max = Integer.MIN_VALUE;

        st = new StringTokenizer(br.readLine(), " ");

        for(int i=0; i<N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        DFS(0, 0);
        System.out.println(max);
    }
}
Comments