2022 KAKAO BLIND RECRUITMENT-신고 결과 받기-C++

고동현·2024년 5월 4일
0

PS

목록 보기
23/51

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;
}
profile
항상 Why?[왜썻는지] What?[이를 통해 무엇을 얻었는지 생각하겠습니다.]

0개의 댓글