#include <stdio.h>
int main() {
int num, N, M;
long long x;
scanf("%d", &num);
for (int i = 0; i < num; i++) {
scanf("%d %d", &N, &M);
x = 1;
for (int j = 0; j < N; j++) {
x = x * (M - j) / (j + 1);
}
printf("%lld\n", x);
}
return 0;
}
1.테스트 케이스의 횟수를 받을 num과 N과 M에 해당하는 변수를 만들어줍니다.
2.수가 매우 커질 수 있으므로 결과를 계산한 값은 long long으로 저장합니다.
3. for(int i = 0; i<num; i++)로 num의 개수만큼 계산해나갑니다.
4.안에 있는 for문은 조합을 간략화한 식으로, 이를 이용해 다리가 얼마나 연결될 수 있는지 계산합니다.
4-1.원래는 각각 따로 계산했지만 오버플로우가 일어나서 4번의 방식으로 바꿨습니다....
5.출력합니다.
#include <stdio.h>
#include <string.h>
int main() {
char N[1000000];
int count[10] = {0};
scanf("%s", N);
for (int i = 0; i < strlen(N); i++) {
count[N[i] - '0']++;
}
int six = (count[6] + count[9] + 1) / 2;
count[6] = six;
count[9] = 0;
int sum = 0;
for (int i = 0; i < 10; i++) {
if (count[i] > sum) {
sum = count[i];
}
}
printf("%d\n", sum);
return 0;
}
1.문자열을 받을 배열, 각 숫자가 얼마나 있는지 체크할 배열 2개를 따로 만듭니다.
2. 입력받은 뒤 for문을 통해서 각 숫자가 얼마나 있는지 체크합니다.
2-1.문자열로 입력받았기에 '숫자'-'0'을 해서 정수로 만들어줍니다.
3.6과 9는 함께 쓸 수 있기에 (6의 수 + 9의 수+1)/2를 해서 숫자를 합쳐줍니다.
4.마지막으로 각 숫자가 얼마나 있는지 for을 돌려서 sum에 전부 합한 뒤 출력합니다.