[프로그래머스] 신고 결과 받기

less than 1 minute read

문제 설명

https://programmers.co.kr/learn/courses/30/lessons/92334

제한사항


풀이

45분
User 클래스를 구성해서 평소와는 다른 방식으로 문제를 풀이해보려고 시도했다.
알고리즘 문제 풀이에 그다지 효율적인 방식은 아니라고 생각하지만… 그냥 이렇게도 해보고 싶었다.

코드

// 04:26 ~ 05:10
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <sstream>

using namespace std;

class User{
    private:
    string id;
    vector<string> reported_list;
    public:
    User(string id){
        this->id = id;
    }
    
    void reported_by(string src){
        if(reported_list.empty() || find(reported_list.begin(),reported_list.end(),src) == reported_list.end()){
            reported_list.push_back(src);
        }
    }
    
    vector<string> get_reported_list(){
        return this->reported_list;
    }
};

vector<int> solution(vector<string> id_list, vector<string> report, int k) {
    vector<int> answer(id_list.size(),0);
    vector<User> users;
    string src,dst;
    map<string,int> id_to_seq;
    for(int i = 0; i < id_list.size(); ++i){
        id_to_seq[id_list[i]] = i;
        User u(id_list[i]);
        users.push_back(u);
    }
    
    for(string s : report){
        stringstream ss(s);
        ss >> src;
        ss >> dst;
        users[id_to_seq[dst]].reported_by(src);
    }
    
    for(int i =0; i < id_list.size(); ++i){
        vector<string> reported_list = users[i].get_reported_list();
        if(reported_list.size() < k) continue;
        for(string reported_id : reported_list){
            answer[id_to_seq[reported_id]] += 1;
        }
    }
    return answer;
}