본문 바로가기

카테고리 없음

C언어 8주차

#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에 전부 합한 뒤 출력합니다.