NAMING 문제 런타임오류 질문드립니다...

  • siskin
    siskin

    NAMING

    #include <stdio.h>
    #include <string.h>
    #define MAX 100
    
    main()
    {
        int i,j,length,result;
        char dad[MAX]="a",mom[MAX]="a",pre[MAX]="a",suf[MAX]="a";
        scanf("%s %s",&dad,&mom);
        strcat(dad,mom);
        length=strlen(dad);
        for(i=0;i<length;i++)
        {
            for(j=0;j<=i;j++)
            {
                    pre[j]=dad[j];
                    suf[j]=dad[length-1-i+j];
            }
            result=strcmp(pre,suf);
            if(result==0)
                printf("%d ",strlen(pre));
        }
        printf("\n");
    }
    

    이 코드로 답안제출을 하였는데 결과가

    RTE (SIGSEGV: segmentation fault, probably incorrect memory access)

    이런오류가 나오는데...

    비쥬얼스튜디오로 해봤을때는 문제가 없었는데
    답안제출하니까 오류가 나오네요 ㅜㅜ
    혼자 해결해볼려고했는데 초보인지라 어떤 오류인지 감이 안와서
    이유가 무엇인지 알고싶어서 물어봅니다


    10년 전
2개의 댓글이 있습니다.
  • hyunhwan
    hyunhwan

    우선 문제를 보시면 입력에 대한 설명에 다음과 같은 이야기가 있습니다.

    두 문자열의 길이를 합쳐서 400,000 자가 넘어가는 입력은 들어오지 않는다.

    그런데 현재 입력을 받는 dad, mom배열의 경우 최대 크기가 100이하인 문자열 값을 받을 수 있기 때문에 오류가 발생합니다. 따라서 입력 받는 배열의 크기를 늘려주셔야 합니다.

    하지만, 여기서 문제가 발생할 수 있는데, MAX값을 100대신 400,000으로 바꾼다고 해도, 지역변수의 경우 그만큼의 값을 잡을만한 여유 공간이 존재하지 않아 여기서도 오류를 발생시킬 수 있기 때문에, 문자열 관련 배열읠 경우는 static으로 선언하거나 전역변수로 빼놓는 것을 추천합니다.

    마지막으로 해당 알고리즘의 경우 시간 복잡도가 O(n^{2})이기 때문에 제한 시간내에 답을 구할 수 없어 런타임 오류를 고치더라도, 시간 제한 초과가 발생할 것입니다. 따라서 이 보다 빠른 시간에 동작하는 알고리즘을 생각해보시는 것이 좋을 것이라 봅니다.


    10년 전 link
  • siskin
    siskin

    자세한답변 감사드립니다^^


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