Programming Practice/PROGRAMMERS

[PG] 신고 결과 받기 - Lv.1

Cage 2022. 6. 14. 21:24


문제

* 해당 문제의 모든 저작권은 프로그래머스 측에 있으며 본 블로그는 학업 흔적을 남겨 학업 상향을 위한 블로그로 이익을 추구하지 않으며 프로그래머스 측의 약관을 위배하지 않음을 명시합니다.*

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

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr


풀이

STL을 사용하지 않고 풀면 꽤나 코드가 길어지고 복잡해질 문제라고 생각한다

신고 처리를 map 컨테니어와 중복을 set 컨테이너를 사용해서 쉽게 풀었기 때문이다.

프로그래머스 문제는 정말 재미있는 편인 것 같다.


소스 코드

#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;
    map<string, int> cnt;
    map<string, set<string>> log;
    
    for(string s : report) {
        string from, to;
        stringstream str(s);
        str >> from >> to;
        
        if (log[from].find(to) == log[from].end()) {
            log[from].insert(to);
            cnt[to]++;
        }
    }
    
    for(string id : id_list) {
        int r_cnt = 0;
        
        for (string check : log[id])
            if(cnt[check] >= k)
                r_cnt++;
        
        answer.push_back(r_cnt);                
    }
    
    return answer;
}