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

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

 

1182๋ฒˆ: ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” N๊ณผ ์ •์ˆ˜ S๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) ๋‘˜์งธ ์ค„์— N๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ์ •์ˆ˜์˜ ์ ˆ๋Œ“๊ฐ’์€ 100,000์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

www.acmicpc.net


1. ๋ฌธ์ œ

๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

2. ํ’€์ด

๊ธฐ๋ณธ ๋ถ€๋ถ„์ˆ˜์—ด ๋ฌธ์ œ์ด๋‹ค.

๋น„ํŠธ๋งˆ์Šคํ‚น์œผ๋กœ ํ’€์–ด๋ณด์•˜๋‹ค.

3. ์ฝ”๋“œ

package com.steady.steady_and_slowly;

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

public class Main {

    static int N, S, ans;
    static int[] arr;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        S = Integer.parseInt(st.nextToken());
        arr = new int[N];
        st = new StringTokenizer(br.readLine());
        for (int i=0; i<N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        // ์ž…๋ ฅ ๋

        for (int i=1; i< 1<<N; i++) {   //๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๊ฐœ์ˆ˜, 0: ๊ณต์ง‘ํ•ฉ
            int sum = 0;
            for (int j=0; j<N; j++) {
                if ((i & (1<<j)) != 0) {    //์กด์žฌํ•œ๋‹ค
                    sum += arr[j];
                }
            }
            if (sum == S) ans++;
        }
        System.out.println(ans);
    }
}

4. ์‚ฌ๋‹ด

๊ธฐ์กด ์žฌ๊ท€๋ฐฉ์‹ subset๋ณด๋‹ค ๊ฐ„๋‹จํ•œ ๊ฒƒ ๊ฐ™๋‹ค.