Home [BaekJoon] 11050 ์ดํ•ญ ๊ณ„์ˆ˜ 1 JAVA
Post
Cancel

[BaekJoon] 11050 ์ดํ•ญ ๊ณ„์ˆ˜ 1 JAVA

๐Ÿ”— ๋ฐฑ์ค€ 11050 ๋ฌธ์ œ https://www.acmicpc.net/problem/11050

๋ฌธ์ œ

\[์ž์—ฐ์ˆ˜\ N\ ๊ณผ\ ์ •์ˆ˜\ K๊ฐ€\ ์ฃผ์–ด์กŒ์„\ ๋•Œ\ ์ดํ•ญ\ ๊ณ„์ˆ˜\ \binom{N}{K}\ ๋ฅผ\ ๊ตฌํ•˜๋Š”\ ํ”„๋กœ๊ทธ๋žจ์„\ ์ž‘์„ฑํ•˜์‹œ์˜ค.\]

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— (N)๊ณผ (K)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค (N) โ‰ค 10, 0 โ‰ค (K) โ‰ค (N))


์ถœ๋ ฅ

\[\binom{N}{K} ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.\]

ํ’€์ด

์ดํ•ญ๊ณ„์ˆ˜

  • ๋‘๊ฐœ์˜ ํ•ญ์„ ์ „๊ฐœํ•˜์—ฌ ๊ณ„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ
  • ์ฆ‰, (a + b)โฟ ์„ ์ „๊ฐœํ•˜์˜€์„ ๋•Œ ๊ณ„์ˆ˜๋ฅผ ์˜๋ฏธ

์˜ˆ๋ฅผ ๋“ค์–ด (a + b)ยฒ = aยฒ + 2ab + bยฒ ์ด๊ณ  ๊ณ„์ˆ˜๋Š” 1, 2, 1 ์ด๋‹ค.

ํŒŒ์Šค์นผ ์‚ผ๊ฐํ˜•

์‚ฌ์‹ค.. ์ˆ˜ํฌ์ž๋ผ ์ดํ•ญ๊ณ„์ˆ˜ ์ดํ•ด๊ฐ€ ์ž˜ ๊ฐ€์ง€ ์•Š์•˜๋‹ค.

๊ฒฐ๊ตญ์—” nCr์ด๊ธฐ๋•Œ๋ฌธ์— factorial์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋™์ ๊ณ„ํš๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š”๊ฑฐ ๊ฐ™์€๋ฐ..

ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋‚˜๋จธ์ง€ factorial ๊ธฐ๋ณธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ถ€ํ„ฐ DP, ๊ทธ๋ฆฌ๊ณ  Bottom-Up๊นŒ์ง€ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด๋ดค๋‹ค.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import java.io.*;
import java.util.StringTokenizer;

public class Main {
    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());
        int k = Integer.parseInt(st.nextToken());

        System.out.println(factorial1(n) / (factorial1(n - k) * factorial1(k)));
        System.out.println(factorial2(n, k));
        System.out.println(DP(n, k));
        System.out.println(BU(n, k));
    }
    
    // ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1
    private static int factorial1(int n) {
        if (n <= 1) return 1;
        return n * factorial1(n - 1);
    }

    // ์•Œ๊ณ ๋ฆฌ์ฆ˜ 2
    private static int factorial2(int n, int k) {
        if (n == k || k == 0) return 1;
        return factorial2(n - 1, k - 1) + factorial2(n - 1, k);
    }

    // ์•Œ๊ณ ๋ฆฌ์ฆ˜ 2๋ฅผ ํ™œ์šฉํ•œ DP
    private static int DP(int n, int k) {
        int[][] dp = new int[n + 1][k + 1];

        // ์ด๋ฏธ ํ’€์—ˆ๋˜ ๋ฌธ์ œ์ผ ๊ฒฝ์šฐ ์ €์žฅํ•ด๋‘” ๊ฐ’ ์žฌํ™œ์šฉ : ๋ฉ”๋ชจ์ด์ œ์ด์…˜
        if (dp[n][k] > 0) return dp[n][k];

        // 2๋ฒˆ ์„ฑ์งˆ
        if (n == k || k == 0) return dp[n][k] = 1;

        // 1๋ฒˆ ์„ฑ์งˆ
        return dp[n][k] = DP(n - 1, k - 1) + DP(n - 1, k);
    }

    // Bottom-Up
    private static int BU(int n, int k) {
        int[][] dp = new int[n + 1][k + 1];

        // 2๋ฒˆ ์„ฑ์งˆ1 (n == k)
        for (int i = 0; i <= k; i++) dp[i][i] = 1;

        // 2๋ฒˆ ์„ฑ์งˆ2 (k == 0)
        for (int i = 0; i <= n; i++) dp[i][0] = 1;

        // 1๋ฒˆ ์„ฑ์งˆ
        for (int i = 2; i <= n; i++) {
            for (int j = 1; j <= k; j++) dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
        }

        return dp[n][k];
    }
}
This post is licensed under CC BY 4.0 by the author.

[BaekJoon] 1920 ์ˆ˜ ์ฐพ๊ธฐ JAVA

[BaekJoon] 1966 ํ”„๋ฆฐํ„ฐ ํ JAVA