N
(프로그래머스 c++ KAKAO)신고 결과 받기 본문
https://programmers.co.kr/learn/courses/30/lessons/92334?language=cpp
map을 이용한 문제 풀이.
3개의 map을 선언하였다.
reported는 <string, int>로 유저가 신고를 받은 횟수를 카운팅한다.
done은 <string, bool>로 한 유저가 동일한 유저에 대해 신고를 여러번 했는지 확인하기 위한 map이다.
target은 <string, vector<string>으로 유저 별 신고한 유저를 저장한다.
먼저 report를 순회한다.
report는 띄어쓰기를 기준으로 "이용자id 신고한id"로 되어있기 때문에,
token으로 문자열을 split 한다.
split 한 결과를 str에 저장하며, 0번째 인덱스에는 이용자 id, 1번째 인덱스에는 신고한 id가 저장된다.
이제 done map을 이용하여 중복 신고 여부를 확인한다.
report[i]를 key로 가지면서, 이에 해당하는 value가 false라면 최초 신고다.
최초 신고에 해당하면, done[report[i]] = true로 바꿔준다.
또한, reported[str[1]]++을 하여 신고당한 유저의 횟수를 카운팅해주며,
마지막으로는 target map에서 이용자 id(str[0]를 key로 가지는 value(vector<string> 형태)에 신고한 id(str[1])을 push해주도록 한다.
만약 done[report[i]] == true라면 중복 신고이기 때문에 아무런 일도 일어나지 않는다.
report를 순회했으니, id_list를 순회하여 정답을 찾아낸다.
이중 for문을 이용.
id_list를 순회하고, target map에서 id_list[i]를 key로 가지는 value를 순회한다.
value는 vector<string>이기 때문에 간단하게 auto itr로 순회를 했다.
map의 반복자는 *itr이 value를 나타내기 때문에, report[*itr]을 하면 신고받은 유저의 횟수를 알아낼 수 있다.
report[*itr] >= k 이상이면 count++을 해주고,
내부 for문이 끝나면 answer.push_back(count)를 한다.
#include <string>
#include <map>
#include <vector>
#include <sstream>
#include <iostream>
using namespace std;
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
vector<int> answer;
map<string, int> reported;
map<string, bool> done;
map<string, vector<string>> target;
for(int i = 0; i < report.size(); i++){
string str[2];
string token;
stringstream ss(report[i]);
int index = 0;
while(ss >> token){
str[index++] = token;
}
if(!done[report[i]]){
done[report[i]] = true;
reported[str[1]]++;
target[str[0]].push_back(str[1]);
}
}
for(int i = 0; i < id_list.size(); i++){
int count = 0;
for(auto itr = target[id_list[i]].begin(); itr != target[id_list[i]].end(); itr++){
if(reported[*itr] >= k){
count++;
}
}
answer.push_back(count);
}
return answer;
}
'프로그래머스 알고리즘 > KAKAO' 카테고리의 다른 글
(프로그래머스 KAKAO JS)성격 유형 검사하기 (0) | 2022.08.20 |
---|---|
(프로그래머스 KAKAO JS)길 찾기 게임 (0) | 2022.06.26 |
(프로그래머스 C++ KAKAO)표 편집 (0) | 2022.04.14 |
(프로그래머스 JS KAKAO)표 편집 (0) | 2022.04.12 |
(프로그래머스 JS KAKAO)가사 검색 (0) | 2022.03.15 |