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

PublicMinsu·2023년 1월 16일
0

문제


이하생략

접근 방법

string이기에 map을 사용해주는 것이 좋다고 생각했다.
이용자의 처벌은 결국 신고자가 여러 명인지 확인하는 것이 중요하다. 중복을 막으면서 여러 명의 사용자를 저장하려면 set이 좋다고 생각했다.

코드

#include <string>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <sstream>
using namespace std;
vector<int> solution(vector<string> id_list, vector<string> report, int k)
{
    vector<int> answer;
    unordered_map<string, unordered_set<string>> targetMap, reportMap;
    unordered_map<string, bool> ban;
    for (string id : id_list)
    {
        targetMap.insert({id, unordered_set<string>()});
        reportMap.insert({id, unordered_set<string>()});
    }
    for (string r : report)
    {
        stringstream ss(r);
        string x, y;
        ss >> x >> y;
        targetMap[y].insert(x);
        reportMap[x].insert(y);
    }
    for (string id : id_list)
    {
        if (targetMap[id].size() >= k)
            ban[id] = true;
    }
    for (string id : id_list)
    {
        int cnt = 0;
        for (string r : reportMap[id])
        {
            if (ban[r])
                ++cnt;
        }
        answer.push_back(cnt);
    }
    return answer;
}

풀이

stringstream을 쓰면 공백을 처리하기 쉬워서 좋은 것 같다.
사용자에 대한 신고 횟수 (중복되지 않는 사용자 수)를 확인한 뒤 기준에 만족하면 bool map에 체크해준다. 이후 사용자가 신고한 사람들에 대해서 확인한 후 ban이 된 사용자만큼 횟수를 세어주어 answer에 추가해주면 된다.

다른 프로그래머스 문제와 비교하면 레벨1 문제는 아닌 것 같기도 하다.

profile
연락 : publicminsu@naver.com

0개의 댓글