2023. 2. 8. 00:42ใCoding Test/Programmers
๐๋ฌธ์ ๋งํฌ
๐จ๐ปํ์ด ๊ณผ์
๋ฌธ์ ๋ฅผ ๋ฑ ์ฝ์ด ๋ดค์ ๋, ์กฐํฉ(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);
}
'Coding Test > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] Lv2. ๋ชจ์ ์ฌ์ | C++ (0) | 2023.06.04 |
---|---|
[Programmers] Lv2. ํธํ ๋์ค (0) | 2023.06.03 |
[Programmers] Lv2. ๋ฏธ๋ก ํ์ถ | C++ (1) | 2023.06.03 |
[Programmers] Lv2. ๋ฌด์ธ๋ ์ฌํ | C++ (0) | 2023.06.03 |
[Programmers] Lv0. ์ต๋น๊ฐ ๊ตฌํ๊ธฐ | C++ (0) | 2023.01.29 |