[Programmers] Lv0. ๊ตฌ์Šฌ์„ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ | C++

2023. 2. 8. 00:42ใ†Coding Test/Programmers

๐Ÿ”—๋ฌธ์ œ ๋งํฌ
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

 

๐Ÿ‘จ‍๐Ÿ’ปํ’€์ด ๊ณผ์ •

 

๋ฌธ์ œ๋ฅผ ๋”ฑ ์ฝ์–ด ๋ดค์„ ๋•Œ, ์กฐํ•ฉ(Combination) ๋ฌธ์ œ๋ž€ ๊ฒŒ ๋– ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค. C++ STL์—๋Š” ์ˆœ์—ด๊ณผ ์กฐํ•ฉ์„ ๊ตฌํ˜„ํ•ด ๋†“์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—†๋‚˜ ์ฐพ์•„๋ดค๋Š”๋ฐ, next_permutation์ด๋ผ๋Š” ์ˆœ์—ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ์žˆ๋”๊ตฐ์š”. ๊ทธ๋ž˜์„œ, ๊ทธ๋ƒฅ ์ง์ ‘ ์ž‘์„ฑํ•˜์—ฌ ํ’€์–ด๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ๋ฌธ์ œ๊ฐ€ ๋  ๋งŒํ•œ ์‚ฌํ•ญ๋“ค์ด ๋‹ค์Œ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

  • balls์™€ share์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€ 30์ธ๋ฐ, 30!์€ 2.6525285981219105863630848e+32 ๋ผ๋Š” ์ˆซ์ž๊ฐ€ ๋‚˜์˜ฌ๋งŒํผ ์–ด๋งˆ์–ด๋งˆํ•˜๊ฒŒ ํฝ๋‹ˆ๋‹ค.
  • ๋ถ„์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด, ๋‚˜๋ˆ—์…ˆ์„ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด ๋ฌดํ•œ ์†Œ์ˆ˜์ฒ˜๋Ÿผ ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ์‹ค์ˆ˜๊ฐ€ ์ƒ๊ธฐ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

ํŠนํžˆ๋‚˜ ์ € ์–ด๋งˆ์–ด๋งˆํ•œ 30!์€ 8byte ์ •์ˆ˜ ์ž๋ฃŒํ˜•์œผ๋กœ๋„ ๋ชป ๋‹ด์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ, ๋‹ค๋ฅธ ํ’€์ด ์ „๋žต์ด ์—†๋‚˜ ์‚ดํŽด๋ณด๋˜ ์ค‘ ๐Ÿ”—์ข‹์€ ํžŒํŠธ ๊ธ€์„ ์ž‘์„ฑํ•ด์ฃผ์‹  ๊ธ€์„ ๋ฐœ๊ฒฌํ•˜์—ฌ ํ’€์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์šฐ์„ , ์กฐํ•ฉ(Combination)์˜ ๊ณต์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์กฐํ•ฉ ๊ณต์‹

 

1 ~ 30 ์ค‘์— 5๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์œ„ ๊ณต์‹์„ ์ด์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

(30 * 29 * 28 * 27 * 26) / 1 * 2 * 3 * 4 * 5

 

ํ•˜์ง€๋งŒ ์œ„์™€ ๊ฐ™์ด ๊ณ„์‚ฐํ•˜๋ฉด, ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๊ธฐ์— ๋‚˜๋ˆ—์…ˆ๋„ ๊ฐ™์ด ์ ์šฉํ•˜๋ฉฐ, ์ˆซ์ž ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

(30 / 1) * (29 / 2) * (28 / 3) * (27 / 4) * (26 / 5)

 

ํ•˜์ง€๋งŒ ์œ„์™€ ๊ฐ™์ด ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด, ์ •์ˆ˜๋กœ ๋”ฑ ๋‚˜๋ˆ  ๋–จ์–ด์ง€์ง€ ์•Š๊ธฐ์— ๋ถ€๋™์†Œ์ˆ˜์ ์—์„œ ๊ณ„์‚ฐ์ด ํ‹€๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. n๊ฐœ์˜ ์—ฐ์†๋œ ์ •์ˆ˜๋“ค์—๋Š” ํ•ญ์ƒ n์˜ ๋ฐฐ์ˆ˜๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ์‚ฌ์‹ค์„ ์ด์šฉํ•˜๋ฉด ํ•ญ์ƒ ์ •์ˆ˜๊ฐ’๋งŒ ๋‚˜์˜ค๊ธฐ์— ์†Œ์ˆ˜์ ์„ ๋งž์ดํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

(((((30 / 1) * 29 / 2) * 28 / 3) * 27 / 4) * 26 / 5)

 

 

์ž˜ ์ง  ์ฝ”๋“œ๋ผ๊ณ  ํ•  ์ˆœ ์—†๊ฒ ์ง€๋งŒ, ์ข‹์€ ํžŒํŠธ๋ฅผ ์•Œ๋ ค์ฃผ์‹  ๊ธ€์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

โœ๏ธ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๊ฒฐ๊ณผ

#include <string>
#include <vector>
using namespace std;

long Combination(int n, int r)
{
    long sum = 1;
    for (int i = 1; i < r + 1; i++)
    {
        sum = (sum * n) / i;
        n--;
    }
    return sum;
}

int solution(int balls, int share) {
    return Combination(balls, share);
}

 

 

728x90
๋ฐ˜์‘ํ˜•