DICTIONARY 문제

  • inchange
    inchange

    여러 번 try 했지만, 오답만 나오네요.
    오답 CASE라도 알려주세요!

    #include <algorithm> //for min
    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    int C, N;
    string tmp;
    vector<string> word;
    vector<vector<int> > adj;
    vector<bool> visited;
    vector<int> order;
    
    void makeGraph(const vector<string>& words) {
    
        for (int j=1; j<words.size(); j++) {
            int i = j-1;
            int len = min(words[i].size(), words[j].size());
            for (int k=0; k<len; k++){
                if (words[i][k] != words[j][k]) {
                    int a = words[i][k] - 'a';
                    int b = words[j][k] - 'a';
                    adj[a][b] = 1;
                    break;
                }
            }
        }
    }
    
    void dfs(int here) {
        visited[here] = true;
        for (int i=0; i<26; i++)
            if (!visited[i] && adj[here][i] == 1)
                dfs(i);
        order.push_back(here);
    }
    
    int main() {
        C = 0;
        std::cin >> C;
        while(C--) {
            N = 0;
            cin >> N;
            word = vector<string>(sizeof(word), "");
            for (int i=0; i<N; i++) {
                cin >> tmp;
                word.push_back(tmp);
            }
            adj = vector<vector<int> >(26, vector<int>(26, 0));
            makeGraph(word);
            visited = vector<bool>(26, false);
            order.clear();
            for (int i=0; i<26; i++) {
                if (!visited[i]) dfs(i);
            }
            reverse(order.begin(), order.end());
            bool chk = false;
            for (int i=0; i<26; i++) {
                for (int j=i+1; j<26; j++) {
                    if (adj[order[j]][order[i]] == 1 ) {
                        chk = true;
                        cout << "INVALID HYPOTHESIS";
                        break;
                    }
                }
            }
            if (!chk) {
            for (int i=0; i<26; i++) {
                cout << (char)(order[i]+'a');
            }
            }
            cout << endl;
        }
    }
    

    10년 전
1개의 댓글이 있습니다.
  • JongMan
    JongMan

    INVALID HYPOTHESIS 출력하는 부분에 문제가 있습니다.

    그나저나 word = vector<string>(sizeof(word), ""); 이건 말이 안 되는 코드인데 (sizeof(word)와 배열의 사이즈는 아무 관계가 없습니다) 왜 이렇게 쓰셨는지..


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