카테고리 없음

[프로그래머스] 신고 결과 받기 C++ (Lv.1)

lheunoia 2023. 4. 30. 15:14

 

 

 

 

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이번 문제는 2022 KAKAO BLIND RECRUITMENT 문제였습니다.

 

 

 

 

 

📝 문제 풀이

1. 각 유저별로 신고 내역을 담을 reportInfo 맵 선언 (key: 신고한 사람, value: 신고당한 사람)

2. 각 유저별로 신고 당한 횟수를 담을 reportCnt 맵 선언 (key: 신고당한 사람, value: 신고당한 횟수)

3. report 벡터를 순회하며 각 유저별로 신고당한 횟수 카운트 (💡 동일한 유저에 대해 2회 이상 신고 시 무시)

4. id_list 벡터를 순회하며 각 유저별로 처리 결과 메일을 받을 횟수 카운트

    ➡️ 자신이 신고한 유저가 k회 이상 신고당했으면 cnt++

 

 

 

 

👩🏻‍💻 C++ 코드

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

using namespace std;

vector<int> solution(vector<string> id_list, vector<string> report, int k) {
    vector<int> answer;
    map<string, vector<string>> reportInfo;
    map<string, int> reportCnt;
    
    vector<string>::iterator iter;
    
    for (string r: report) {
        stringstream ss(r);
        string reporter, reported;
        ss >> reporter >> reported;
        
        // 동일한 유저에 대한 신고 횟수는 1회로 처리
        iter = find(reportInfo[reporter].begin(), reportInfo[reporter].end(), reported);
        if (iter != reportInfo[reporter].end()) continue;
        
        reportInfo[reporter].push_back(reported);
        reportCnt[reported]++;
    }
    
    for (int i=0; i<id_list.size(); i++) {
        int cnt = 0;
        string reporter = id_list[i];
        
        for (int j=0; j<reportInfo[reporter].size(); j++) {
            // k번 이상 신고당하면 이용 정지
            if (reportCnt[reportInfo[reporter][j]] >= k) cnt++;
        }
        
        answer.push_back(cnt);
    }
    
    return answer;
}

 

프로그래머스 - 결과 화면

 

 

 

 

반응형