https://programmers.co.kr/learn/courses/30/lessons/92334
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <set>
using namespace std;
vector<int> solution(vector<string> id_list, vector<string> report, int k)
{
vector<int> answer(id_list.size(), 0);
map<string, int> m;
map<string, set<string>> str_vec;
map<string, set<string>> reverse_str_vec;
map<string, int> id2idx;
string str = "";
string user1, user2;
for (int i = 0; i < id_list.size(); i++)
{
m[id_list[i]] = 0;
id2idx[id_list[i]] = i;
}
for (int i = 0; i < report.size(); i++)
{
str = "";
user1 = "";
user2 = "";
for (int j = 0; j < report[i].size(); j++)
{
if (report[i][j]>='a' && report[i][j]<='z')
{
str += report[i][j];
}
else
{
user1 += str;
str = "";
}
}
user2 += str;
str_vec[user1].insert(user2);
reverse_str_vec[user2].insert(user1);
}
for (auto x : str_vec)
{
for (auto y : str_vec[x.first])
{
m[y]++;
}
}
for (int i = 0; i < id_list.size(); i++)
{
if (m[id_list[i]] >= k)
{
for (auto x : reverse_str_vec[id_list[i]])
answer[id2idx[x]]++;
}
}
return answer;
}
int main(void)
{
vector<string> id_list1 = { "muzi", "frodo", "apeach", "neo" };
vector<string> report1 = { "muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi" };
int k1 = 2;
vector<string> id_list2 = { "con", "ryan" };
vector<string> report2 = { "ryan con", "ryan con", "ryan con", "ryan con" };
int k2 = 3;
vector<int> answer = solution(id_list2, report2, k2);
return 0;
}