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

Date :   Updated :

โ“ ๋ฌธ์ œ

๋ฐฑ์ค€ 11050 - โ€œ์ดํ•ญ ๊ณ„์ˆ˜ 1โ€

๐ŸŽฏ ๋‚œ์ด๋„

Bronze ๐ŸŸค1

๐Ÿง  ํ’€์ด

1. ๋‚ด ํ’€์ด (์ดํ•ญ ๊ณ„์ˆ˜ - ํŒฉํ† ๋ฆฌ์–ผ)

- ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • Combinatorics, Mathematics

- ์„ค๋ช…

ํŒฉํ† ๋ฆฌ์–ผ ์ˆ˜ํ•™ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ ํ’€์ด์ด๋‹ค.

์ดํ•ญ ๊ณ„์ˆ˜์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ๊ทธ ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

\[\binom{n}{r} = \frac{n!}{r! (n - r)!}\]

ํŒฉํ† ๋ฆฌ์–ผ ๊ตฌํ˜„์€ ์žฌ๊ท€๊ฐ€ ์•„๋‹Œ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๊ณ , ํ˜น์‹œ ๋ชจ๋ฅผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ์—ผ๋‘์— ๋‘์–ด long long ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

ํŒฉํ† ๋ฆฌ์–ผ ํ•œ๋ฒˆ์— O(N)์ด๋ฏ€๋กœ ์ „์ฒด์ ์ธ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ด๋‹ค.

- ์ฝ”๋“œ

๋‚ด ํ’€์ด ์ฝ”๋“œ
#include <iostream>


using namespace std;

typedef long long ll;

ll Facto(ll llStart);

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll llN{}, llK{};
    cin >> llN >> llK;

    cout << Facto(llN) / (Facto(llK) * Facto(llN - llK));

    return 0;
}

// ํŒฉํ† ๋ฆฌ์–ผ ๊ตฌํ˜„ ํ•จ์ˆ˜
ll Facto(ll llStart)
{
    ll llResult{ 1 };

    for(ll i = 2; i <= llStart; ++i)
    {
        llResult *= i;
    }

    return llResult;
}

2. ์ถ”๊ฐ€ ํ’€์ด 1 (์ดํ•ญ ๊ณ„์ˆ˜ - ํŒŒ์Šค์นผ์˜ ์‚ผ๊ฐํ˜•)

- ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • Combinatorics, Mathematics, Dynamic Programming

- ์„ค๋ช…

์ดํ•ญ ๊ณ„์ˆ˜์˜ ํŒŒ์Šค์นผ์˜ ์‚ผ๊ฐํ˜• ์ •๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฉ์‹์ด๋‹ค.

  • ํŒŒ์Šค์นผ์˜ ์‚ผ๊ฐํ˜• ์ •๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

\[C(n, k) = C(n - 1, k - 1) + C(n - 1, k)\]

  • ๋˜ํ•œ ์ดํ•ญ ๊ณ„์ˆ˜์˜ ๊ธฐ๋ณธ์ ์ธ ์„ฑ์งˆ ์ค‘์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๋‹ค.

\[C(n, 0) = C(n, n) = 1\]

๋”ฐ๋ผ์„œ ์œ„์˜ ๋‘ ์‹์„ ์ด์šฉํ•˜๋ฉด 'DP ์‹'์„ ์„ธ์›Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด N์ด ์ปค์ง€๋Š” ๊ฒฝ์šฐ์˜ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ ์‚ฌ์‹ค์ƒ ๊ฐ€์žฅ ๋ณดํŽธ์ ์ด๊ณ  ์ •์„์— ๊ฐ€๊นŒ์šด ๋ฐฉ๋ฒ•์ด๋‹ค.

์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(Nยฒ)์ด์ง€๋งŒ N์ด ์ž‘์€ ๊ฒฝ์šฐ O(N)๊ณผ ํฌ๊ฒŒ ์ฐจ์ด๊ฐ€ ์—†๋‹ค.

- ์ฝ”๋“œ

๋‚ด ํ’€์ด ์ฝ”๋“œ
#include <iostream>


using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int iN{}, iK{};
    cin >> iN >> iK;

    int arrC[11][11]{};

    for(int i = 0; i <= iN; ++i)
    {
        arrC[i][0] = arrC[i][i] = 1;

        for(int j = 1; j < i; ++j)
        {
            arrC[i][j] = arrC[i - 1][j - 1] + arrC[i - 1][j];
        }
    }

    cout << arrC[iN][iK];

    return 0;
}

3. ์ถ”๊ฐ€ ํ’€์ด 2 (์ดํ•ญ ๊ณ„์ˆ˜ - ํŒฉํ† ๋ฆฌ์–ผ ์ตœ์ ํ™”)

- ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • Combinatorics, Mathematics

- ์„ค๋ช…

์œ„์˜ ๋‚ด ํ’€์ด์—์„œ ํŒฉํ† ๋ฆฌ์–ผ ๋ถ€๋ถ„์„ ์ตœ์ ํ™”ํ•œ ๋ฐฉ์‹์ด๋‹ค.

  • ์ดํ•ญ ๊ณ„์ˆ˜์˜ ์ •๋ฆฌ์—์„œ

\[\binom{n}{r} = \frac{n!}{r! (n - r)!}\]

  • ๋ถ€๋ถ„์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

\[\binom{n}{r} = \frac{n \cdot (n + 1) \cdots (n - k + 1)}{k!}\]

  • ๊ทธ๋ฆฌ๊ณ  ์ด๋Š” ๋‹ค์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

\[\binom{n}{r} = \varPi_{i = 1}^{k} \frac{n - k + i}{i}\]

์ด ๋ฐฉ์‹์œผ๋กœ ํŒฉํ† ๋ฆฌ์–ผ์„ ์ตœ์ ํ™”ํ•ด์ฃผ๋ฉด, ๊ณ„์‚ฐ ์ค‘๊ฐ„์— ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋”์šฑ ๋ฒ”์šฉ์ ์ด๊ณ  ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

ํŒฉํ† ๋ฆฌ์–ผ์˜ ๊ณ„์‚ฐ ์ค‘๊ฐ„ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์ตœ์ ํ™”์ผ ๋ฟ์ด๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์—ฌ์ „ํžˆ O(N)์ด๋‹ค.

- ์ฝ”๋“œ

๋‚ด ํ’€์ด ์ฝ”๋“œ
#include <iostream>


using namespace std;

typedef long long ll;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll llN{}, llK{};
    cin >> llN >> llK;

    // ๋” ์ž‘์€ ๊ฐ’ ์„ ํƒํ•ด์„œ ๋ฐ˜๋ณต๋ฌธ ์ตœ์ ํ™”
    llK = llK > llN - llK ? llN - llK : llK;

    ll llResult{ 1 };

    for(ll i = 1; i <= llK; ++i)
    {
        // long long์˜ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
        llResult = llResult * (llN - llK + i) / i;
    }

    cout << llResult;

    return 0;
}

๐Ÿ’ญ ํ›„๊ธฐ

์‚ฌ์‹ค ์กฐํ•ฉ๋ก ์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ์•Œ์ง€ ๋ชปํ–ˆ๊ณ , ์ด๋Ÿฐ ๋ฌธ์ œ๋Š” ์•„์˜ˆ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•˜๋ฉด ํ’€์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๋˜ํ•œ ์กฐํ•ฉ๋ก ์—” ์—ฌ๋Ÿฌ ์ •๋ฆฌ์™€ ์„ฑ์งˆ, ๋ณ€ํ˜•์ด ์žˆ์œผ๋ฏ€๋กœ ์ž˜ ์ˆ™์ง€ํ•ด๋‘๋Š” ๊ฒƒ์ด ์ข‹์„ ๋“ฏํ•˜๋‹ค.

๐Ÿ”— ์ฐธ๊ณ ์ž๋ฃŒ

Comments