이하생략
string이기에 map을 사용해주는 것이 좋다고 생각했다.
이용자의 처벌은 결국 신고자가 여러 명인지 확인하는 것이 중요하다. 중복을 막으면서 여러 명의 사용자를 저장하려면 set이 좋다고 생각했다.
#include <string>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <sstream>
using namespace std;
vector<int> solution(vector<string> id_list, vector<string> report, int k)
{
vector<int> answer;
unordered_map<string, unordered_set<string>> targetMap, reportMap;
unordered_map<string, bool> ban;
for (string id : id_list)
{
targetMap.insert({id, unordered_set<string>()});
reportMap.insert({id, unordered_set<string>()});
}
for (string r : report)
{
stringstream ss(r);
string x, y;
ss >> x >> y;
targetMap[y].insert(x);
reportMap[x].insert(y);
}
for (string id : id_list)
{
if (targetMap[id].size() >= k)
ban[id] = true;
}
for (string id : id_list)
{
int cnt = 0;
for (string r : reportMap[id])
{
if (ban[r])
++cnt;
}
answer.push_back(cnt);
}
return answer;
}
stringstream을 쓰면 공백을 처리하기 쉬워서 좋은 것 같다.
사용자에 대한 신고 횟수 (중복되지 않는 사용자 수)를 확인한 뒤 기준에 만족하면 bool map에 체크해준다. 이후 사용자가 신고한 사람들에 대해서 확인한 후 ban이 된 사용자만큼 횟수를 세어주어 answer에 추가해주면 된다.
다른 프로그래머스 문제와 비교하면 레벨1 문제는 아닌 것 같기도 하다.