https://programmers.co.kr/learn/courses/30/lessons/17677
u_map 에 짝이 되는 string 과 그 개수를 저장.
중복되지 않게 v 에 string 을 저장
v 를 돌리면서 string 으로 map 에 접근해서 그 개수로 결과를 도출.
int solution(string str1, string str2) {
std::transform(str1.begin(), str1.end(), str1.begin(), ::tolower);
std::transform(str2.begin(), str2.end(), str2.begin(), ::tolower);
std::unordered_map<string, int> str1Map;
std::unordered_map<string, int> str2Map;
std::vector<string> v;
int answer = 0;
int gyo = 0;
int hab = 0;
string subS;
for (int i = 0; i < str1.size() - 1; i++) {
if (isalpha(str1[i]) && isalpha(str1[i + 1])) {
subS = str1.substr(i, 2);
if (str1Map.find(subS) == str1Map.end()) {
v.push_back(subS);
}
str1Map[subS]++;
}
}
for (int i = 0; i < str2.size() - 1; i++) {
if (isalpha(str2[i]) && isalpha(str2[i + 1])) {
if (isalpha(str2[i]) && isalpha(str2[i + 1])) {
subS = str2.substr(i, 2);
if (str1Map.find(subS) == str1Map.end() && str2Map.find(subS) == str2Map.end()) {
v.push_back(subS);
}
str2Map[subS]++;
}
}
}
if (v.size() == 0) return 65536;
for (int i = 0; i < v.size(); i++) {
if (str1Map.find(v[i]) != str1Map.end() && str2Map.find(v[i]) != str2Map.end()) {
int min = std::min(str1Map[v[i]], str2Map[v[i]]);
int max = std::max(str1Map[v[i]], str2Map[v[i]]);
gyo += min;
hab += max;
}
else if (str1Map.find(v[i]) != str1Map.end()) {
hab += str1Map[v[i]];
}
else {
hab += str2Map[v[i]];
}
}
answer = (float)gyo / (float)hab * 65536;
return answer;
}