WILDCARD 문제 - main()에서 어떤 부분이 잘못된 것인지 알고싶습니다.

  • drusty97
    drusty97

    WILDCARD 문제 관련하여 질문드립니다. 아래는 제 코드입니다. 너무 해결이 안 되어서 함수를 책에 있는 함수를 그대로 따라했는데 오류가 나더군요ㅠㅠ 책이 잘못되었을 리는 없으니 main()에서 처리를 잘못해 준 것 같은데 어느 부분이 잘못된 것인지를 모르겠습니다.


    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int cache[101][101] = { -1 };
    string W , S;
    
    bool matchMemoized(int w, int s) {
        int& ret = cache[w][s];
    
        if (ret != -1)
            return ret;
    
        if (s < S.size() && w < W.size() && (W[w] == '?' || S[s] == W[w])) {
            return ret = matchMemoized(w + 1, s + 1);
        }
    
        if (w == W.size())
            return ret = (s == S.size());
    
        if (W[w] == '*') {
            if (matchMemoized(w + 1, s) || (s < S.size() && matchMemoized(w, s + 1)))
                return ret = 1;
        }
    
        return ret=0;
    }
    int main(void) {
        int casenum, filenum;
        string buffer;
    
        cin >> casenum;
        for (int i= 0; i < casenum; i++) {
            if(i==0)    
                getline(cin,buffer);
            getline(cin,W);
            cin >> filenum;
            getline(cin,buffer);
            for (int j = 0; j < filenum; j++) {
                for(int arr_x=0;arr_x<101;arr_x++)
                    for(int arr_y=0;arr_y<101;arr_y++)
                        cache[arr_x][arr_y] = -1;
    
                getline(cin, S);
                if (matchMemoized(0, 0) == true)
                    cout << S<<endl;
            }
        }
    }
    


    7년 전
1개의 댓글이 있습니다.
  • seico75
    seico75

    문제는 결과를 알파벳 순으로 출력하라고 되어 있네요.


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