문제풀이(Problem Solving)

프로그래머스 카카오, 신고 결과 받기 C++ [CPP] ★★

게임이 더 좋아 2022. 5. 5. 15:12
반응형
728x170

우선 map을 자유자재로 사용한다면 쉽겠다.

unordered_map인데도.. 순서가 바뀌어서 깜짝 놀랐다.

 

 

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

 

 


 

#맞는 풀이

#include <bits/stdc++.h>

using namespace std;

vector<int> solution(vector<string> id_list, vector<string> report, int k) {
    vector<int> answer(id_list.size());
    
    int idx = 0;
    //유저 ID, Index
    unordered_map<string, int> users;
    
    //유저 ID, 신고받은 횟수
    unordered_map<string, int> result;
    
    
    for(auto x : id_list){
        result[x]; //0으로 초기화
        users[x] = idx++;
    }
    
    //유저 ID, 신고한 ID(여러번 신고한 것은 1번)
    unordered_map<string, set<string>> history;
    
    //id_list 순서대로 넣음 => 다 가지고는 있어야함(신고를 안했더라도)
    for(auto x : id_list){
        history[x];
    }
    
    for(auto y : report){
        stringstream ss(y);
        string id;
        string target;
        getline(ss, id, ' ');
        getline(ss, target, ' ');
        history[id].insert(target);
    }
    
    //신고 받은 횟수 기록
    for(auto z : history){
        cout << z.first << '\n';
        for(auto id : z.second){
            result[id]++;
        }
    }
    
    for(auto a : history){
        int ans = 0;
        for(auto b : a.second){
            if(result[b] >= k){
                ans++;
            }
        }
        answer[users[a.first]] = ans;
    }

    return answer;
}

 

그냥 풀었다.

생각없이 이렇게 체크하면 되겠네 하고 풀었다.

 

주의할점은 결과도 id_list 순서에 맞춰서 나와야하기 때문에

결과를 순서대로 맞추기 위해 index를 설정해야 하는 것이다.

 

 

 

 

728x90
반응형
그리드형