https://school.programmers.co.kr/learn/courses/30/lessons/92334
이번 문제는 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;
}
반응형