๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[DFS] 1. ํ•ฉ์ด ๊ฐ™์€ ๋ถ€๋ถ„์ง‘ํ•ฉ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 2. 14.

<<ํ’€์ด>>

 

-๋‚˜์˜ ํ’€์ด-

 

์šฐ์„  ๋‚˜์˜ ํ’€์ด๋Š” ํ‹€๋ ธ๋”ฐ ใ…‹ใ…‹ใ…‹ ๋‚˜๋ฆ„ ์ž˜ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์‹œ๋„๋Š” ์ข‹์•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์–ด๋–ค ๋ถ€๋ถ„์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฑฐ ๊ฐ™์€๋ฐ, ์‹œ๊ฐ„ ์ƒ ์•„์ง ์ฒดํฌ๋ฅผ ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. 

import java.util.Scanner;

class Main{
    private static int[] arr;
    private static int[] ch;
    private static int sum;
    private static int target;
    private String DFS(int v) {
        sum += v;
        for (int x : arr) {
            if (ch[x] != 1) {
                target += x;
            }
        }
        if (sum == target) return "YES";
        else {
            target = 0;
            for (int x : arr) {
                if (ch[x] != 1) {
                    ch[x] = 1;
                    DFS(x);
                    sum -= x;
                    ch[x] = 0;
                }
            }
        }
        return "NO";
    }


    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        arr = new int[n];
        ch = new int[11];

        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }
        ch[arr[0]] = 1;
        System.out.println(T.DFS(arr[0]));
    }
}

 

 

-๊ฐ•์‚ฌ๋‹˜ ํ’€์ด-

 

ํฌ ~ ์ด ๋ฌธ์ œ๋„ ๊ธฐ๊ฐ€๋ง‰ํžˆ๊ฒŒ ํ‘ธ์…จ๋‹ค. ๋‚˜๋„ ์ด๋Ÿฐ ํ’€์ด๋Š” ์•Œ๊ณ ๋Š” ์žˆ์—ˆ์ง€๋งŒ, ๋– ์˜ค๋ฅด์ง€ ๋ชปํ–ˆ๋‹ค.. ใ… 

์ผ๋‹จ ์ „์ฒด์ ์ธ ๋งฅ๋ฝ์€ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ ์•ˆ ํ•˜๊ฑฐ๋‚˜ ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ ์„œ ์ง„ํ–‰์„ ํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  return ํƒ€์ž…๋„ void๋กœ ํ•ด์„œ ์ง„ํ–‰์„ ํ–ˆ๋‹ค.

 

์ดํ›„, ๊ฐ’์ด total ๊ฐ’์— sum์„ ๋นผ๊ฑฐ๋‚˜ total์„ 2๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๊ฐ’์ด sum๊ณผ ๊ฐ™๋‹ค๋ฉด answer์— "YES" ๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ํ–ˆ๋‹ค. 

answer๊ฐ€ "YES"๊ฐ€ ๋˜๋Š” ์ˆœ๊ฐ„ ๋ถ€ํ„ฐ๋Š” ๋” ์ด์ƒ ๊ณ„์‚ฐ์ด ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— flag ๋ฅผ false๋กœ ํ•ด๋‘” ๊ฒƒ์„ true๋กœ ๋ฐ”๊ฟˆ์œผ๋กœ์จ 

๊ณ„์† return์ด ๋˜๋„๋ก ํ•˜์—ฌ, ๊ณ„์‚ฐ์„ ๋๋‚ด๋„๋ก ํ–ˆ๋‹ค.

 

 

 

import java.util.Scanner;

class Main {
    static String answer = "NO";
    static int n, total = 0;
    boolean flag = false;

    public void DFS(int L, int sum, int[] arr) {
        if (flag) return;
        if (sum > total / 2) return;
        if (L == n) {
            if ((total - sum) == sum) {
                answer = "YES";
                flag = true;
            }
        }
        else {
            DFS(L + 1, sum + arr[L], arr);
            DFS(L + 1, sum, arr);
        }
    }


    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
            total += arr[i];
        }
        T.DFS(0, 0, arr);
        System.out.println(answer);
    }
}

 

์ฐธ ์ฝ”๋“œ๊ฐ€ ๋งŽ์ด ๊น”๋”ํ•ด์กŒ๋‹ค. ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ๊ฐœ๋…์ ์œผ๋กœ ์•Œ๊ณ ๋Š” ์žˆ์ง€๋งŒ ์•„์ง ๋‚ด ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค๋ณด๋‹ˆ ์ œ๋Œ€๋กœ ํ™œ์šฉ์€ ๋ชปํ•œ ๊ฑฐ ๊ฐ™๋‹ค.

์ง€๊ธˆ์€ ์ด๋ ‡์ง€๋งŒ ์ ์ฐจ ๋Š˜๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜๊ณ , ๋‚ด ํ˜ผ์ž ๋‹ค์‹œ ์ฝ”๋“œ ์ž‘์„ฑํ•ด์„œ ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค!

๋Œ“๊ธ€