핵심 아이디어

<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;
}

실버를 푸는데 에디토리얼을 봤다..

동일한 멀티셋인지 확인 하는 방법으로 문자열을 정렬하는 방법이 독특했다.