https://programmers.co.kr/learn/courses/30/lessons/92334
#include <string>
#include <vector>
#include <sstream>
#include <set>
#include <map>
#include <algorithm>
using namespace std;
vector<string> split(string sentence, char Seperator)
{
vector<string> answer;
stringstream ss(sentence);
string tmp;
while (getline(ss, tmp, Seperator))
{
answer.push_back(tmp);
}
return answer;
}
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
vector<int> answer(id_list.size(), 0);
vector<int> report_list(id_list.size(), 0); // 신고 당한 횟수
set<string> remove_overlap; // 중복 제거할 set 변수
map<int, vector<int>> check_list; // 누굴 신고했는지
// 중복 제거
for (auto x : report) { remove_overlap.insert(x); }
// Parsing 및 신고당한 횟수
for (auto report_tmp : remove_overlap)
{
// Parsing
vector<string> split_report = split(report_tmp, ' ');
// 신고당한 횟수 Up
int reported = find(id_list.begin(), id_list.end(), split_report[1]) - id_list.begin();
report_list[reported] += 1;
// 신고한 사람 등록
int reporter = find(id_list.begin(), id_list.end(), split_report[0]) - id_list.begin();
check_list[reporter].push_back(reported);
}
// 신고한 사람한테 안내메일 (k회 이상 신고당한 사람)
for (auto check : check_list)
{
int reporter = check.first; // 신고한 사람
// check.second : 신고당한 사람
for (int i = 0; i < check.second.size(); i++)
{
if (report_list[check.second[i]] >= k)
{
answer[reporter] ++;
}
}
}
return answer;
}
'알고리즘 > Coding Test' 카테고리의 다른 글
음양 더하기 C++ (0) | 2022.05.19 |
---|---|
없는 숫자 더하기 C++ (0) | 2022.05.19 |
키패드 누르기 C++ (0) | 2022.05.19 |
숫자 문자열과 영단어 C++ (0) | 2022.05.18 |
신규 아이디 추천 C++ (0) | 2022.05.18 |