C++ 라이브러리를 알면 쉬웠던 문제
푸는 순서를 설명해보면
1. init으로 map을 초기화한다.
2. id를 파싱한다.
3. check로 확인한다.
4. id_list순서대로 메일이오는 것을 확인하기
1번 init으로 map초기화
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
vector<int> answer;
if(id_list.size()>k){
init(id_list);
...
}
void init(vector<string> &id_list){
for(int i=0;i<id_list.size();i++){
vector<string>s;
m[id_list[i]] = s;
van[id_list[i]] = 0;
}
}
이렇게 하면
m은
이런식으로
key가 유저 id 그리고 신고한 id가 value로 vector형태로 들어갈거다.
van은 이런식으로
map<string,vector> m;
map<string,int> van;
2번 파싱하기
for(int i=0;i<report.size();i++){
int j=0;
string user = "";
string attack = "";
for(j=0;j<report[i].size();j++){
if(report[i][j] != ' '){
user+=report[i][j];
}else{
break;
}
}
for(int x=j+1; x<report[i].size();x++){
attack += report[i][x];
}
```
3번 check함수
check(user,attack);
```
void check(string user, string attack){
auto mapit = m.find(user);
vector & tmp = mapit -> second;
if(find(tmp.begin(),tmp.end(),attack)==tmp.end()){
tmp.push_back(attack);
map<string,int>::iterator iter;
van[attack]++;
}
}
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
map<string,vector<string>> m;
map<string,int> van;
void init(vector<string> &id_list){
for(int i=0;i<id_list.size();i++){
vector<string>s;
m[id_list[i]] = s;
van[id_list[i]] = 0;
}
}
void check(string user, string attack){
auto mapit = m.find(user);
vector<string> & tmp = mapit -> second;
if(find(tmp.begin(),tmp.end(),attack)==tmp.end()){
tmp.push_back(attack);
map<string,int>::iterator iter;
van[attack]++;
}
}
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
vector<int> answer;
if(id_list.size()>k){
init(id_list);
for(int i=0;i<report.size();i++){
int j=0;
string user = "";
string attack = "";
for(j=0;j<report[i].size();j++){
if(report[i][j] != ' '){
user+=report[i][j];
}else{
break;
}
}
for(int x=j+1; x<report[i].size();x++){
attack += report[i][x];
}
check(user,attack);
}
for(int i=0;i<id_list.size();i++){
string check = id_list[i];
auto mapit = m.find(check);
vector<string> & tmp = mapit -> second;
int total=0;
for(int i=0;i<tmp.size();i++){
string t = tmp[i];
if(van[t]>=k){
total++;
}
}
answer.push_back(total);
}
}else{
for(int i=0;i<id_list.size();i++){
answer.push_back(0);
}
}
return answer;
}