[BOJ] 1182번 : 부분 수열의 합

ErroredPasta·2022년 3월 26일
0

BOJ

목록 보기
5/21

코드

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

public class Main {

    static int n;
    static int s;
    static int[] elements;
    static int count = 0;

    public static void main(String[] args) {
        input();
        func(0, 0);

        // 합이 0인 경우, 모든 수열을 고르지 않아도 0이고 진부분집합은
        // 적어도 하나의 수를 골라야하므로
        if (s == 0) {
            --count;
        }

        System.out.println(count);
    }

    static void input() {
        Scanner scanner = new Scanner(System.in);

        n = scanner.nextInt();
        s = scanner.nextInt();
        elements = new int[n];

        for (int i = 0; i < n; ++i) {
            elements[i] = scanner.nextInt();
        }

        scanner.close();
    }

    static void func(int rec, int value) {
        // 모든 수를 고를지 말지 결정한 후
        if (rec == n) {
            // 합이 원하는 수일 경우
            if (value == s) ++count;
            return;
        }

        func(rec + 1, value + elements[rec]); // rec + 1 번째 수를 포함하는 경우
        func(rec + 1, value); // rec + 1 번째 수를 포함하지 않는 경우
    }
}

profile
Hola, Mundo

0개의 댓글