0
으로 초기화 해준다.mail
의 구조는 key
에 신고자가 들어가고 value
에 신고한 사람의 수가 들어간다.unordered_map
으로 해주려고 했는데 왜인지 순서가 이상하게 출력돼서 그냥 map
으로 구현했다.report_list
의 key
는 신고 받은 사람, value
는 신고 한 사람의 리스트가 들어간다. 신고자의 리스트를 set
으로 한 이유는 중복 처리를 막으려고bool
체크를 해서 a
는 신고자, b
는 신고 받은 사람이 된다.report_list
를 돌리면서 iter->second
의 size
가 k
이상인 사람은 정지가 되기 때문에 mail[u]++
를 해준다.unordered_map
이 제대로 안돌아가서 id_list
를 돌리면서 answer
에 정지 먹인 사람의 수를 추가해주었다.#include <string>
#include <vector>
#include <map>
#include <set>
using namespace std;
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
vector<int> answer;
map<string,set<string>> report_list;
map<string, int> mail;
for(int i=0;i<id_list.size();i++)
{
mail.insert(make_pair(id_list[i], 0));
}
for(int i=0;i<report.size();i++)
{
string a="";
string b="";
bool chk=false;
for(int j=0;j<report[i].size();j++)
{
if(report[i][j]!=' '&&chk==false) a+=report[i][j];
else if(report[i][j]==' ') chk=true;
else b+=report[i][j];
}
report_list[b].insert(a);
}
auto iter = report_list.begin();
while(iter!=report_list.end())
{
if(iter->second.size()>=k)
{
for(auto u:iter->second)
{
mail[u]++;
}
}
iter++;
}
for(int i=0;i<id_list.size();i++)
{
answer.push_back(mail[id_list[i]]);
}
return answer;
}
오랜만에 푸는 알고리즘.. 1단계인데 30분이나 걸리다니 다시 공부 열심히 해야지..