Naming 문제 알수없는(?) 런타임 에러 문의드립니다 ㅎㅎ

  • Jinsanger
    Jinsanger

    얼마전에 시간제한 500ms라는 흥미로운 문제를 잡고 몇일째 고민중입니다 ㅎㅎ
    고민 끝에 시간 내에 들어오는 알고리즘을 찾았는데, 정작 알고리즘 쪽이 아닌
    출력하는 부분에서 ㅎㅎ 런타임 에러가 뜹니다 하하ㅠㅠ

    일단 스택 오버플로우는 확실히 아니고, 메모리 접근 에러인데... 배열 내의 한정된 사이즈에 대한 for loop인데 왜 런타임 에러가 나는지 이해가 안되네요 ㅠㅠ

    알고리즘이 문제면 억울하지라도 않을텐데 출력부분에서...

    어떤게 문제일까요 ㅡ_ㅜ

    추가로 아직 안푸신 분들은 정말 좋은 문제이니 풀어보세요!

    #include <iostream>
    #include <string.h>
    using namespace std;
    
    char nameInput[200001] = {0, };
    char fullName[400001] = {0, };
    int fullNameLen = 0;
    int solveArray[400001] = {0, };
    int solveArrayCnt = 1;
    int piTable[400001] = {0, };
    
    void FailureFunction(char* pattern){
    
        int m = strlen(pattern);
        int i=0, j=-1;
    
        piTable[0] = -1;
        while(i<m){
            if(j == -1 || pattern[i] == pattern[j]){
                i++;
                j++;
                piTable[i] = j;
            }else{
                j = piTable[j];
            }
        }
    }
    void Naming(){
        fullNameLen = strlen(fullName);
        FailureFunction(fullName);
    }
    int main(void){
    
        cin>>fullName>>nameInput;
        strcat(fullName, nameInput);
    
        Naming();
    
        int idx = fullNameLen;
        solveArray[0] = fullNameLen;
    
        while(idx > 0){
            solveArray[solveArrayCnt++] = piTable[idx];
            idx = piTable[idx];
        }
    
        ///이 부분이 런타임에러!!!///
        for(int i=solveArrayCnt; i>=0; i--){
            if(solveArray[i] > 0)
                cout<<solveArray[i]<<" ";
        }
        /////////////////////////////
        return 0;
    }
    


    8년 전
4개의 댓글이 있습니다.
  • Toivoa
    Toivoa

    문제에 두 문자열의 길이를 합쳐서 40만자가 넘어가지 않는다고만 되어있네요


    8년 전 link
  • Jinsanger
    Jinsanger

    음?? 그건 어떤 말씀이신가욥? 이해가 잘 안되서 ㅋㅋ ㅜㅜ


    8년 전 link
  • nosiar
    nosiar

    nameInput이 200000보다 길수도 있지 않을까요


    8년 전 link
  • Jinsanger
    Jinsanger

    아 ㅠㅠ 말씀해주신 부분이 맞는것 같네요 ㅋㅋㅋㅋ
    하하하 ㅜㅜㅜㅜㅜㅜㅜ 출력을 지웠을 때 오답이 뜨길래, 문제가 안될거라고 짧은 생각을 했었습니다 ㅜㅜ


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