DICTIONARY self review 
1. ํด๊ฒฐ ์๋ ๊ณผ์
์์์ ๋ ฌ์ ์ํด indegree์ ch๋ฅผ ์ ์ธํ์ฌ ์ ์ฅํ๊ณ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ์ ๋ ฌ์ ์๋ํ์์ต๋๋ค.
2. ์์ฑํ ์ฝ๋์ ์ค๋ช
while (c--) {
string s, p;
fill(indegree.begin(), indegree.end(), 0);
fill(ch.begin(), ch.end(), 0);
vector <vector <int>> v(26);
cin >> n >> s;
p = s;
ch[p[0] - 97] = 1;
for (int i = 1; i < n; i++) {
cin >> s;
if (p[0] != s[0]) {
if (ch[s[0] - 97] == 0) ch[s[0] - 97] = 1;
indegree[s[0] - 97]++;
v[p[0] - 97].push_back(s[0] - 97);
}
else {
int pp = 1;
while (pp < p.size() && pp < s.size()) {
if (p[pp] != s[pp]) {
if (ch[p[pp] - 97] == 0) ch[p[pp] - 97] = 1;
if (ch[s[pp] - 97] == 0) ch[s[pp] - 97] = 1;
indegree[s[pp] - 97]++;
v[p[pp] - 97].push_back(s[pp] - 97);
break;
}
pp++;
}
}
p = s;
}
cout << topologySort(v) << endl;
}
๋จผ์ ์
๋ ฅ๋ ์์๋๋ก ๋น๊ตํ์ฌ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ indegree๋ ๊ตฌํด์ฃผ์์ต๋๋ค.
๋ ๋จ์ด์ 0๋ฒ์งธ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ค์ ์ธ๋ฑ์ค์ ํด๋นํ๋ ๋ฌธ์๋ฅผ ๋น๊ตํด์ฃผ์์ต๋๋ค.
๊ทธ๋ ๊ฒ ๊ตฌํ ์ธ์ ๋ฆฌ์คํธ๋ฅผ topologySortํจ์์ ๋งค๊ฐ๋ณ์๋ก ๋๊ฒจ์ฃผ์ด ์์์ ๋ ฌ์ ํด ์ถ๋ ฅํด ์ฃผ์์ต๋๋ค.
string topologySort(vector <vector <int>>& v) {
string s = "";
queue <int> q;
for (int i = 0; i < 26; i++) {
if (ch[i] == 1 && indegree[i] == 0) {
q.push(i);
}
}
while (!q.empty()) {
int x = q.front();
q.pop();
char c = x + 97;
s += c;
for (int j = 0; j < v[x].size(); j++) {
if (v[x][0] == 50) return "INVALID HYPOTHESIS";
if (--indegree[v[x][j]] == 0) q.push(v[x][j]);
}
v[x].clear();
v[x].push_back(50);
}
if(s == "") return "INVALID HYPOTHESIS";
for (int i = 0; i < 26; i++) {
if (ch[i] == 0) {
char c = i + 97;
s += c;
}
}
return s;
}
queue๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋จ indegree๊ฐ์ด 0์ธ ๊ฐ์ ๋ฃ์ด์ฃผ์์ต๋๋ค. ๊ทธ ๋ค์ bfs๋ฅผ ํตํด ์์์ ๋ ฌ์ ํด ์ฃผ์์ต๋๋ค.
์ํ์ ๋ง๊ธฐ์ํด ์ด๋ฏธ ์ ๋ ฌ์ ์ฌ์ฉํ ์ ์ ๋ฆฌ์คํธ๋ clearํด์ค ๋ค์ ๊ฐ 50์ ๋ฃ์ด์ฃผ์๊ณ , for ๋ฌธ์ ๋๋ 0๋ฒ์งธ ๊ฐ์ด 50์ด๋ฉด ์ด๋ฏธ ์ ๋ ฌ์ ์ฌ์ฉํ ์ ์ ์ผ๋ก ์ํ๋ ๊ฒ ์ด๋ฏ๋ก ๋ฐ๋ก INVALID HYPOTHESIS๋ฅผ ๋ฆฌํดํด์ฃผ์์ต๋๋ค.
๋ indegree๊ฐ 0์ธ ๊ฒ์ด ์์ด s๊ฐ ๋น์ด์์ ๊ฒฝ์ฐ์๋ ์ํ์ด๋ ๋ป์ด๋ฏ๋ก INVALID HYPOTHESIS๋ฅผ ๋ฆฌํดํด์ฃผ์์ต๋๋ค.
3. ๋งํ ์ ๋ฐ ๊ฐ์ ์ฌํญ
์์ ์
๋ ฅ์ ์ ๋ต์ด ์ ๋๋ก ๋์์ ์ ํํ ์ด๋์ ํ๋ฆฐ์ง๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ง์ฝ ๋๊ฐ์ ์์๊ฐ ์ค๋ณต์ผ๋ก ๋์ฌ ๋ ์ด์ฐจํผ topologySortํจ์์์ ๊ฑธ๋ฌ์ง๋ฏ๋ก ์ธ์ ๋ฆฌ์คํธ ๋ง๋ค๋ ์ฒ๋ฆฌ๋ฅผ ์ํด์คฌ๋๋ฐ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ๋ฃ์ด์ค์ผํ ๊ฒ ๊ฐ์ต๋๋ค.
DICTIONARY self review
1. ํด๊ฒฐ ์๋ ๊ณผ์
์์์ ๋ ฌ์ ์ํด indegree์ ch๋ฅผ ์ ์ธํ์ฌ ์ ์ฅํ๊ณ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ์ ๋ ฌ์ ์๋ํ์์ต๋๋ค.
2. ์์ฑํ ์ฝ๋์ ์ค๋ช
๋จผ์ ์ ๋ ฅ๋ ์์๋๋ก ๋น๊ตํ์ฌ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ indegree๋ ๊ตฌํด์ฃผ์์ต๋๋ค.
๋ ๋จ์ด์ 0๋ฒ์งธ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ค์ ์ธ๋ฑ์ค์ ํด๋นํ๋ ๋ฌธ์๋ฅผ ๋น๊ตํด์ฃผ์์ต๋๋ค.
๊ทธ๋ ๊ฒ ๊ตฌํ ์ธ์ ๋ฆฌ์คํธ๋ฅผ topologySortํจ์์ ๋งค๊ฐ๋ณ์๋ก ๋๊ฒจ์ฃผ์ด ์์์ ๋ ฌ์ ํด ์ถ๋ ฅํด ์ฃผ์์ต๋๋ค.
queue๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋จ indegree๊ฐ์ด 0์ธ ๊ฐ์ ๋ฃ์ด์ฃผ์์ต๋๋ค. ๊ทธ ๋ค์ bfs๋ฅผ ํตํด ์์์ ๋ ฌ์ ํด ์ฃผ์์ต๋๋ค.
์ํ์ ๋ง๊ธฐ์ํด ์ด๋ฏธ ์ ๋ ฌ์ ์ฌ์ฉํ ์ ์ ๋ฆฌ์คํธ๋ clearํด์ค ๋ค์ ๊ฐ 50์ ๋ฃ์ด์ฃผ์๊ณ , for ๋ฌธ์ ๋๋ 0๋ฒ์งธ ๊ฐ์ด 50์ด๋ฉด ์ด๋ฏธ ์ ๋ ฌ์ ์ฌ์ฉํ ์ ์ ์ผ๋ก ์ํ๋ ๊ฒ ์ด๋ฏ๋ก ๋ฐ๋ก INVALID HYPOTHESIS๋ฅผ ๋ฆฌํดํด์ฃผ์์ต๋๋ค.
๋ indegree๊ฐ 0์ธ ๊ฒ์ด ์์ด s๊ฐ ๋น์ด์์ ๊ฒฝ์ฐ์๋ ์ํ์ด๋ ๋ป์ด๋ฏ๋ก INVALID HYPOTHESIS๋ฅผ ๋ฆฌํดํด์ฃผ์์ต๋๋ค.
3. ๋งํ ์ ๋ฐ ๊ฐ์ ์ฌํญ
์์ ์ ๋ ฅ์ ์ ๋ต์ด ์ ๋๋ก ๋์์ ์ ํํ ์ด๋์ ํ๋ฆฐ์ง๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ง์ฝ ๋๊ฐ์ ์์๊ฐ ์ค๋ณต์ผ๋ก ๋์ฌ ๋ ์ด์ฐจํผ topologySortํจ์์์ ๊ฑธ๋ฌ์ง๋ฏ๋ก ์ธ์ ๋ฆฌ์คํธ ๋ง๋ค๋ ์ฒ๋ฆฌ๋ฅผ ์ํด์คฌ๋๋ฐ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ๋ฃ์ด์ค์ผํ ๊ฒ ๊ฐ์ต๋๋ค.