- toc {:toc}
๋ฌธ์
ํ์ ๋ฐ์ํ์ ์ฐธ์ํ๋ ๊ฒ์ ์ข์ํ๋ ์ฃผํฌ๋ ์ด๋ฒ ๊ธฐํ์ ๋ถ๋ ํ์ฅ์ด ๋๊ณ ์ถ์ด ๊ฐ ์ธต์ ์ฌ๋๋ค์ ๋ถ๋ฌ ๋ชจ์ ๋ฐ์ํ๋ฅผ ์ฃผ์ตํ๋ ค๊ณ ํ๋ค.
์ด ์ํํธ์ ๊ฑฐ์ฃผ๋ฅผ ํ๋ ค๋ฉด ์กฐ๊ฑด์ด ์๋๋ฐ, โa์ธต์ bํธ์ ์ด๋ ค๋ฉด ์์ ์ ์๋(a-1)์ธต์ย 1ํธ๋ถํฐ bํธ๊น์ง ์ฌ๋๋ค์ ์์ ํฉ๋งํผ ์ฌ๋๋ค์ ๋ฐ๋ ค์ ์ด์์ผ ํ๋คโ ๋ ๊ณ์ฝ ์กฐํญ์ ๊ผญ ์งํค๊ณ ๋ค์ด์์ผ ํ๋ค.
์ํํธ์ ๋น์ด์๋ ์ง์ ์๊ณ ๋ชจ๋ ๊ฑฐ์ฃผ๋ฏผ๋ค์ด ์ด ๊ณ์ฝ ์กฐ๊ฑด์ ์งํค๊ณ ์๋ค๊ณ ๊ฐ์ ํ์ ๋, ์ฃผ์ด์ง๋ ์์ ์ ์ k์ n์ ๋ํด k์ธต์ nํธ์๋ ๋ช ๋ช ์ด ์ด๊ณ ์๋์งย ์ถ๋ ฅํ๋ผ. ๋จ, ์ํํธ์๋ 0์ธต๋ถํฐ ์๊ณ ๊ฐ์ธต์๋ 1ํธ๋ถํฐ ์์ผ๋ฉฐ, 0์ธต์ย iํธ์๋ i๋ช ์ด ์ฐ๋ค.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ Test case์ ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ์ผ์ด์ค๋ง๋ค ์ ๋ ฅ์ผ๋ก ์ฒซ ๋ฒ์งธ ์ค์ ์ ์ k, ๋ ๋ฒ์งธ ์ค์ ์ ์ n์ด ์ฃผ์ด์ง๋ค
์ถ๋ ฅ
๊ฐ๊ฐ์ Test case์ ๋ํด์ ํด๋น ์ง์ ๊ฑฐ์ฃผ๋ฏผ ์๋ฅผ ์ถ๋ ฅํ๋ผ.
์ ํ
- 1 โค k, n โค 14
์ถ์ฒ:https://www.acmicpc.net/problem/2775
์ฌ๊ณ ๊ณผ์
์ฒซ ์๊ฐ์ ์ํ์ ์ผ๋ก ์ ๊ทผํด์ผ ํ๋ค๋ ๊ฒ์ด์๋ค. ๊ท์น์ ์ฐพ๊ณ ์ ๋ ธ๋ ฅํ๊ณ ์ซ์๋ฅผ ๊ทธ๋ ค๊ฐ๋ฉด์ ์๊ฐํ๋ค. ํ๋ฅผ ๊ทธ๋ ค๊ฐ๋ฉด์ ์ ๊ทผํ๋๋ฐ ๊ท์น์ด ๋ณด์ผ ๋ฏ ๋ง ๋ฏ ํ๋ฉฐ ์ ์ฐพ์์ง์ง ์์๋ค. ์ด์ ๋๊ธฐ์๊ฒ ์ง๋ฌธํ๊ณ ๊ท์น์ ์ฐพ์ผ๋ ค ๋ ธ๋ ฅํ๋ค ๋ณด๋ ์กฐํฉ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.
์ด์ ์กฐํฉ์ผ๋ก ๋ํ๋ด์ด ํ์์ง๋งโฆ
๊ฒฐ๊ณผ๋ ์๊ฐ์ด๊ณผ์๋ค. ํฉํ ๋ฆฌ์ผ์ ๊ณ์ํด์ ๋๋ฆฌ๋๋ฐ ์ ํ์ ๋์๋๋ผ๋ ๋ง์ ํ์๋ฅผ ๋๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ ๊ฒ ๊ฐ๋ค.
#include <iostream>
using namespace std;
int factorial(int num);
int main()
{
int testC, k, n, livingN;
cin >> testC;
for(int i=0; i<testC; i++)
{
cin >> k >> n;
livingN = factorial(k+n)/(factorial(k+1)*factorial(n-1));
cout << livingN << endl;
}
return 0;
}
int factorial(int num)
{
if(num == 1)
return 1;
else
{
return num*factorial(num-1);
}
}์ดํ ์ ํ ๊ฐ์ ์ก์ง ๋ชปํ๊ฒ ์ด์ ๋ค๋ฅธ ์ฌ๋๋ค์ ํ์ด๋ฅผ ์ฐพ์๋ดค๋๋ฐ ์ฌ๊ทํจ์๋ก ํ์ดํ ์ ์์๋ค. ์ฌ๊ทํจ์๊ฐ ์๋ฏธํ๋ ๋ฐ๋ ๊ฒฐ๊ตญ 1์ธต์ 3ํธ ์ฌ๋์ ์๋ฅผ ์๊ณ ์ถ์ ๋ 1์ธต 2ํธ์ ์ฌ๋ + 0์ธต 3ํธ์ ์ฌ๋ โ 1์ธต 3ํธ์ ์ฌ๋ ์ ์ธ ๊ฒ์ด์๋ค.
๋ฌธ์ ๋ฅผ ํ์ดํ ๋ ๋ง์ ๋ฌธ์ ๋ฅผ ํ์ง ์์์ ์ธ์ง, ํน์ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๋ ๊ฒ์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ํ์คํ ๊ฒ์ ๋ฌธ์ ๋ฅผ ํ์ดํ ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด๋ณด์ง ์๋๋ค๋ ๊ฒ์ด ๋ด ๋จ์ ์ธ ๊ฒ ๊ฐ๋ค. ํ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ํ ๋ ์ ์ด๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณด๋๋ก ๋ ธ๋ ฅํด๋ณด์.
#include <iostream>
using namespace std;
int getNum(int k, int n)
{
if(n == 1)
return 1;
if(k == 0)
{
return n;
}
else
{
return getNum(k-1, n)+getNum(k, n-1);
}
}
int main()
{
int testC, k, n, livingN;
cin >> testC;
for(int i=0; i<testC; i++)
{
cin >> k >> n;
livingN = getNum(k, n);
cout << livingN << endl;
}
return 0;
}