5_BAEKJOON

5 BAEKJOON) 백준1010 : 다리 놓기

Mi:sAng 2022. 11. 7. 21:15

*해결방안 : 동쪽에 있는 '서로 다른'  M개의 사이트 중에서 N개를 뽑은 다음 순서대로 서쪽 사이트에 연결하면 된다.
따라서 조합 mCn을 쓰면 된다. M!/((M-N)!N!)이다.

 

*추가 : 3개의 팩토리얼을 다 구현하는 것은 번거로우므로 M!/(M-N)!은 M부터 (M-N+1) 까지 곱해진 것으로 바꾼다.

*int 범위를 넘는 값이 나오므로 double 사용하였다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
	
	int val = 0;
	int m = 0;
	int n = 0;
	double total = 0;
	double p = 1;
	scanf("%d", &val);
	for (int i = 0; i < val; i++) {
		scanf(" %d %d", &n, &m);
		for (int k = m-n+1; k <= m; k++) {
			p = p * k;
		}
		total = p; 
		p = 1;

		for (int k = 1; k <= n; k++) {
			p = p * k;
		}
		total = total / p;
		p = 1;

		printf("%.0lf\n", total);
	}


	return 0;
}