런타임오류(RTE) 검토 부탁드립니다.

  • kwangswei
    kwangswei

    으으.. 3시간 째 컴파일&런타임 오류로 씨름 중이네요.
    조언 부탁 드립니다. ㅡ.ㅜ

    런타임오류 페이지 바로가기

    문제는 WILDCARD 입니다.

    제가 생각한 솔루션은,
    1. 기저사례

    • pattern 이 * 만 남거나,
    • pattern 길이가 0이면 input 길이도 0이면 성공, 그 외는 실패
      1. pattern 이 * 일 경우, 1) input 의 한 문자를 할당하고 나머지 문자열에 대해서 매칭 여부 확인. 2) 공백으로 간주하여 나머지 패턴에 대해서 문자열과 매칭 여부 확인.
      2. pattern 이 * 이 아닌 경우
    • ? 거나 pattern[0] 과 input[0] 이 같으면 pattern[1:], input[1:] 이 매칭되는지 확인.

    도움 부탁 드립니다!
    감사합니다.

    #include <cstdio>
    #include <iostream>
    #include <map>
    
    using namespace std;
    
    enum {NONE, TRUE, FALSE};
    
    map< pair<string, string>, int> cache;
    
    int IsMatched(string pattern, string input)
    {
        if ( pattern.compare("*") == 0 )
            return TRUE;
    
        if ( pattern.length() == 0 )
            return input.length() == 0 ? TRUE : FALSE;
    
        int& ret = cache[pair<string,string>(pattern, input)];
        if ( ret != NONE )
            return ret;
    
        ret = FALSE;
    
        if ( pattern[0] == '*' )
        {
            if ( input.length() > 0 && IsMatched(pattern, input.substr(1)) == TRUE )
                ret = TRUE;
            else if ( IsMatched(pattern.substr(1),  input) == TRUE )
                ret = TRUE;
        }
        else if ( pattern[0] == '?' || pattern[0] == input[0] )
            ret = IsMatched(pattern.substr(1), input.substr(1));
    
        return ret;
    }
    
    int main()
    {
        int T;
        cin >> T;
    
        while ( T-- )
        {
            cache.clear();
            string pattern;
            cin >> pattern;
    
            int inputCnt;
            cin >> inputCnt;
    
            for ( int i = 0; i < inputCnt; i++ )
            {
                string inputStr;
                cin >> inputStr;
                if ( IsMatched(pattern, inputStr) == TRUE )
                    cout << inputStr << endl;
            }
        }
        return 0;
    }
    

    11년 전
1개의 댓글이 있습니다.
  • kwangswei
    kwangswei

    찾았습니다!!!
    입력으로 pattern('?'), input('') 을 넣으면 문제가 발생하는군요!!


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