TRIPATHCNT 런타임 오류 및 효율성 질문입니다.

  • 신유건
    신유건

    C언어

    int mul(int n)
    {
    int result = 1;

    for (int i = 0; i < n; i++)
    {
        result *= 2;
    }
    return result;

    }

    int main()
    {
    int C= 0;
    int n = 0;
    int i = 0, j = 0;
    int** arr = NULL;
    int* code=NULL;
    int sum1 = 0;
    int sum2 = 0;
    int count = 0;
    printf("테스트 몇번? : ");
    scanf("%d", &C);
    if (C > 50)
    return 0;
    for (int a = 0; a < C; a++)
    {
    printf("삼각형의 크기는? : ");
    scanf("%d", &n);
    if (n < 2 || n>180)
    return 0;
    arr = (int**)malloc(sizeof(int*)*n);//이차원배열
    code = (int*)malloc(sizeof(int)*(n-1));//동적할당
    for (int i = 0; i < n; i++)
    {
    arr[i] = (int*)malloc(sizeof(int)*i);
    if (i < n - 1)
    {
    code[i] = 0;
    }
    }
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j <= i; j++)
    {
    scanf("%d", &arr[i][j]);
    }
    }
    sum1 = arr[0][0];

    while (i<n-1)//가장 큰 경로합을 만든다.
        {
            if(arr[i + 1][j + 1] > arr[i + 1][j])
            {
                sum1 += arr[i + 1][j + 1];
                i++;
                j++;
            }
            else
            {
                sum1 += arr[i + 1][j];
                i++;
            }
        }//숫자가 제일 큰경우를 만듬
        for (int i = 0; i < mul(n - 1) ;i++)//이진수 배열을 만들어 0이면 바로아래줄로 1이면 아래 오른쪽 수를 더하게끔한다.
        {
            sum2 = arr[0][0];
            for (int i = 0; i < n - 1;i++)//2가 넘으면 1올려준다.
            {
                if (code[i] >= 2)
                {
                    if (code[n - 2] == 2)
                        code[n - 2] = 0;
    
                    code[i + 1]++;
                    code[i] = 0;
    
                }
            }
            for (int i = 0, j=0; i < n - 1; i++)
            {
    
                if (code[i])
                {
                    sum2 += arr[i + 1][j + 1];
                    j++;
                }
                else
                    sum2 += arr[i + 1][j];
            }
            code[0]++;
            if (sum1 == sum2)//제일큰 수와 현재 경로의 수가 같으면 1 올라감
                count++;
        }
    
        printf("%d\n", count);//count의개수 출력
    }
    
    free(code);
    
    return 0;

    }

    제 코드는 위와 같습니다 그런데 런타임오류가 걸리는데 무슨이유인지 모르겠습니다.

    그리고 보시다시피 코드를 효율적으로 짜지 못하였는데 효율적으로 짤수 있는방법을 여쭈어보고 싶습니다.


    8년 전
1개의 댓글이 있습니다.
  • pumpyboom
    pumpyboom

    재귀함수로 하루종일 도전해보고있습니다. 결과가 나오길 바라며...


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.