프로그래머스/Level_1

[Level_1 / C++ / 카카오] 신고 결과 받기

배발자 2022. 1. 23.
반응형

 

 

<set> 자료구조

중복제거를 하기위해 쓰이는 자료구조이다. 많이 쓰이는 자료구조는 아니지만 문제에서 모든값의 중복을 없애고 오름차순으로 정렬하라는 문제가 나온다면 사용할 수 있다. 헤더로 set을 갖고 s

baebalja.tistory.com

 

 

<stringstream> 공백으로 문자열 자르기

문자열이 공백이 주어진 상태로 주어진다면 공백을 기준으로 문자열을 자를 수 있다. 예) string s = "abc def gh" ; 해당 문자열을 "abc" , "def" , "gh" 로 자르는 거다. 해당 문법을 알아보자. #include #inclu..

baebalja.tistory.com

 

<map> 자료구조

*헤더로 을 갖는다. 은 key 와 value 의 쌍으로 이루어진 균형 이진 트리이다. key 를 기준으로 사전순으로 정렬되어 있기 때문에 검색 속도가 빠르다. 바로 map 의 쓰임을 알아보자. string s= "my name is m

baebalja.tistory.com


이 문제에서 set과 map 그리고 문자열을 적절히 잘 자르고 활용을 해야한다. 

 

1. 먼저 map 을 하나 생성하여 해당 문자열의 인덱스 번호를 저장한다. 

2. 신고받은 친구를 key값으로 갖는 두번째 맵을 생성하여 신고를 한 친구들을 차례대로 삽입한다. 이때, 중복을 허용하지않는 set 자료구조를 활용한다. 

3. 신고받은 친구가 가지고 있는 친구들의 사이즈를 보고 k값보다 이상이면 answer벡터 친구들의 인덱스 번호의 value값을 하나씩 올려준다. 

 

 

#include <string>
#include <vector>
#include <map> 
#include <set> 
#include <sstream> 

using namespace std;

vector<int> solution(vector<string> id_list, vector<string> report, int k) {
    
    vector<int> answer(id_list.size(), 0 ); 
    map <string, int> index_m; 
    for(int i=0; i<id_list.size(); i++){
        index_m[id_list[i]]=i; 
    }
    
    stringstream ss; 
    map <string, set<string>> m; 
    for(auto x : report){
        ss.str(x); 
        string s1, s2; 
        ss>>s1>>s2;         
        m[s2].insert(s1);     
        ss.clear(); 
    }    
    for(auto it : m){
        if(it.second.size()>=k){
            for(auto x : it.second){
                answer[index_m[x]]++;                 
            }
        }        
    }   
    
    return answer;
}

 

 

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

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

programmers.co.kr

 

반응형

댓글