[프로그래머스] 신고 결과 받기
문제 설명
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;
}