PS (C, C++)

[백준/C] 1010 다리놓기

최연재 2022. 8. 20. 04:44

https://www.acmicpc.net/problem/1010

 

1010번: 다리 놓기

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.

www.acmicpc.net

코드

#include <stdio.h>

double result(int a, int b);
double factorial(int n);

int main()
{
	int n,a,b;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d %d", &a, &b);
		printf("%.f\n", result(a,b));
	}
	return 0;
}

double result(int a, int b)
{
	if (a == b) return 1;
	else if (a == 1) return b;
	else return factorial(b) / (factorial(b - a) * factorial(a));
}

double factorial(int n)
{
	if (n == 0) return 1;
	return n * factorial(n - 1);
}

코드 설명

나는 조합을 이용해서 문제를 풀었다.  nCr = n! / ((n-r)! * r!) 이므로 팩토리얼을 구하는 함수 factorial을 사용해서 조합의 공식대로 값을 계산해 출력했다.

 

느낀 점

함수의 자료형 때문에 몇 번 틀렸다. 아무 생각 없이 int형으로 선언했다가 당연히 틀렸고, 그래서 long long을 썼는데 이때도 틀려서 당황했다. 문제에도 관련 질문이 있어서 읽어보고 상황을 이해했다. 평소에는 아무 생각이 없이 자료형을 썼는데, (정수면 int, 실수면 double) 자료형도 신중하게 고민하고 써야겠다고 느꼈다. 

관련 질문 링크 : https://www.acmicpc.net/board/view/93759

 

글 읽기 - unsigned long long 이랑 double에 대해 질문이 있습니다.

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

 

'PS (C, C++)' 카테고리의 다른 글

[백준/C] 1159 농구 경기  (0) 2022.08.21
[백준/C] 1032 명령 프롬프트  (0) 2022.08.20
[백준/C] 1924 2007년  (0) 2022.08.20
[백준/C] 문자열  (0) 2022.08.20
[백준/C] 함수  (0) 2022.08.20