DICTIONARY 문제 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 INVALID HYPOTHESIS 출력하는 부분에 문제가 있습니다. 그나저나 word = vector<string>(sizeof(word), ""); 이건 말이 안 되는 코드인데 (sizeof(word)와 배열의 사이즈는 아무 관계가 없습니다) 왜 이렇게 쓰셨는지.. 10년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
inchange
여러 번 try 했지만, 오답만 나오네요.
오답 CASE라도 알려주세요!
10년 전