알고리즘/카카오 기출

[프로그래머스/C++] 신고 결과 받기 - 2022 KAKAO BLIND RECRUITMENT

수디sudy 2022. 2. 4. 15:59

문제 : https://programmers.co.kr/learn/courses/30/lessons/92334?language=cpp 

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

 

 

갑자기 푼 카카오 블라인드 2022 문제

이런 류의 문제는 너무 오랜만에 풀어서 map이랑 sstream 쓰는 거에서 시간을 많이 잡아먹었당

그래도 첫 트라이에 성공떠서 기분 쥬아~~~~ 

 

#include <string>
#include <vector>
#include <map>
#include <iostream>
#include <sstream>
#include <algorithm>
using namespace std;

vector<int> solution(vector<string> id_list, vector<string> report, int k) {
    vector<int> answer;
    map<string,int> reported; // 유저별 신고당한 횟수
    map<string,int> success; // 유저별 신고성공한 횟수
    vector<vector<string>> report_list; //신고자, 신고당한사람 으로 이루어진 2차원 벡터
    
    for(int i=0; i<id_list.size(); i++)
    {
        answer.push_back(0); 
        reported.insert(pair<string,int>(id_list[i],0));
        success.insert(pair<string,int>(id_list[i],0));
        
    }
    
    sort(report.begin(), report.end());
    report.erase(unique(report.begin(), report.end()), report.end());
    
    
    for(int i=0; i<report.size(); i++)
    {
        vector<string> people; //idx 0이 신고자, 1이 신고당한사람
        istringstream ss(report[i]);
        string str;
        while(ss>>str)
        {
            people.push_back(str);
        }
        
        reported[people[1]] += 1;
        
        report_list.push_back(people);
    }
    
    
    
    for(int i=0; i<report_list.size(); i++)
    {
        if(reported[report_list[i][1]] >= k) 
        {
            success[report_list[i][0]] += 1;
        }
    }
    
    for(int i=0; i<id_list.size(); i++)
    {
        answer[i] = success[id_list[i]];
    }
    
    return answer;
}