https://programmers.co.kr/learn/courses/30/lessons/92334
유저 목록과, 신고 내역이 배열로 주어지고, 신고 성공에 대한 기준 횟수 k 가 입력으로 주어질 때 k번 이상 신고된 유저는 게시판 사용이 정지가 되며 이를 신고한 유저들은 메일을 받게 된다. 그랬을 때 각 유저가 메일을 받은 횟수를 배열에 담아 출력하면 되는 문제로 map
을 활용하여 다음과 같이 풀이하였다.
userId
/ xId
(신고를 받은 ID) set
value로 가지는 map xId
에 저장한다 xId
를 탐색하면서 value의 크기가 k 이상인 경우 신고한 유저들을 카운트 해준다. userId[j]++
id_list
를 순차탐색하며 userId
와 비교해준다.userId
에 id_list
값이 없다는 것은 신고에 성공한유저가 없다는 것이다.answer
에 push_back
해준다.
#include<iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <set>;
using namespace std;
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
vector<int> answer;
map<string, int> userId;
map<string, set<string>> xId;
//report 탐색
for (int i = 0; i < report.size(); i++) {
//문자열 파싱
string from;
string to;
int blank = report[i].find(' ');
from = report[i].substr(0, blank);
to = report[i].substr(blank);
xId[to].insert(from);
}
//xId 탐색
for (auto i : xId) {
if (i.second.size() >= k) { // 신고횟수가 k번 이상인가?
for (auto j : i.second) {
userId[j]++;
}
}
}
//id_list 탐색
for (int i = 0; i < id_list.size(); i++) {
if (userId.find(id_list[i])!=userId.end()) {
answer.push_back(userId[id_list[i]]);
}
else {
answer.push_back(0);
}
}
return answer;
}