<aside> 💡
단어를 결정짓는 요소는 단어의 시작, 끝 중간의 문자들로 이루어진 멀티셋이다.
중간의 문자들로 이루어진 멀티셋은 서브스트링을 정렬하여 같은지 인덱싱 할 수 있다. (map사용)
단어의 시작, 끝으로 2차원 배열을 만들 수 있다.
</aside>
#include <bits/stdc++.h>
#define FASTIO ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
using namespace std;
typedef long long int ll;
int n, m;
string t;
map<string, string> mp[26][26];
signed main()
{
FASTIO;
cin >> n;
for(int i = 0; i<n; i++){
cin >> t;
string idx = t.substr(1, (int)t.size()-1);
sort(idx.begin(), idx.end());
mp[t[0]-'a'][t.back()-'a'][idx] = t;
}
cin >> m;
for(int i = 0; i<m; i++){
cin >> t;
string idx = t.substr(1, (int)t.size()-1);
sort(idx.begin(), idx.end());
cout << mp[t[0]-'a'][t.back()-'a'][idx] <<' ';
}
return 0;
}
실버를 푸는데 에디토리얼을 봤다..
동일한 멀티셋인지 확인 하는 방법으로 문자열을 정렬하는 방법이 독특했다.