• 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;
}