DIVIS 문제 런타임오류.

  • skylife927
    skylife927

    https://algospot.com/judge/problem/read/DIVIS
    DIVIS 런타임 오류입니다.
    또 RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow) 이 에러가 나는데요.
    경계값을 넘어서지 않는데 왜 그럴까요@_@?

    #include <iostream>
    #define MAX_N 1000
    using namespace std;
    
    char arr[MAX_N];
    
    int myLength(){
        int i=0;
        while(arr[i] != '\0' && i<MAX_N){
            i++;
        }
        return i;
    }
    
    int main()
    {
        while(true){
            scanf("%s", arr);
            //end 문자열이 주어지는 경우에는 빠져나온다.
            if(arr[0] == 'e' && arr[1] == 'n' && arr[2] == 'd')
                break;
    
            int sum = 0;
            int length = myLength();
            // 62^n mod 61 은 1이다. 그래서 각 자리수만 더함. 
            // 0~9 48~57
            // A~Z 65~90
            // a~z 97~122
            for(int i = 0; i<length; i++){
                //58이하면 숫자이니 48을 뺀값을 더한다.
                //91이하면 대문자인 경우이니, A는 65고 10으로 해주기 위해서는 55를 빼준다.
                //그 이외에는 소문자인 경우이니, 61빼준다.
                sum+= (arr[i] < 58) ? arr[i] - 48 : (arr[i] < 91) ? arr[i] - 55 : arr[i] - 61;
            }
            if(sum%61 ==0) {
                cout<<"yes"<<endl;
            } else {
                cout<<"no"<<endl;
            }
        }
        return 0;
    }
    

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

    입력 문자열 길이 제한이 1,000이 아니라 10,000입니다.


    8년 전 link
  • skylife927
    skylife927

    정말 감사합니다. MAX_N 10000이상으로 해주니 통과하였네요.
    문제를 꼼꼼히 보지 못했네요 ㅠ
    감사합니다!


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