문제
풀이
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm> //unique, find
#include <sstream> // istringstream
using namespace std;
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
string name;
string report_name;
int idx = 0;
vector<vector<string>> user(id_list.size(),vector<string>()); // 계정당 신고한 id
vector<int> report_count(id_list.size(),0); //신고당한 횟수
vector<int> answer(id_list.size(),0);
vector<string> report_user; // 정지된 유저 id
//중복값 제거
sort(report.begin(), report.end());
report.erase(unique(report.begin(),report.end()), report.end());
for(int i=0; i<report.size(); i++){
istringstream ss(report[i]);
ss>>name;
idx = find(id_list.begin(), id_list.end(), name) - id_list.begin(); // index
ss>>report_name;
user[idx].push_back(report_name);
idx = find(id_list.begin(), id_list.end(), report_name) - id_list.begin(); // index
report_count[idx]++;
}
//정지된 아이디
for(int i=0; i<report_count.size(); i++){
if(report_count[i] >= k){
report_user.push_back(id_list[i]);
}
}
for(int i=0; i< user.size(); i++){
for(int j=0; j<report_user.size(); j++){
if(find(user[i].begin(), user[i].end(),report_user[j]) != user[i].end())
answer[i] = answer[i] +1;
}
}
return answer;
}
변수랑 벡터를 많이 선언해서 코드 가독성이 나쁜 것 같아 이 부분을 해결해 보았다.
풀이2
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm> //unique, find
#include <sstream> // istringstream
#include <set>
using namespace std;
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
string name;
string name2;
vector<int> answer(id_list.size(),0);
unordered_map<string, set<string>> um; // 신고한사람, 신고당한사람 // set
unordered_map<string, int> um2; // 신고당한사람, 신고당한횟수
//중복값 제거
sort(report.begin(), report.end());
report.erase(unique(report.begin(),report.end()), report.end());
for(int i=0; i<report.size(); i++){
istringstream ss(report[i]);
ss >> name;
ss >> name2;
um[name].insert(name2);
um2[name2]++;
}
for(int i=0; i<id_list.size(); i++){
name = id_list[i];
for(auto j : um[name] ){
if(um2[j] >= k) answer[i]+=1;
}
}
return answer;
}
vector대신 해시와 set을 사용했다.
set은 사용해본 적이 많이 없어서 구글링 해가며 풀었다.
범위 기반 for 문을 사용해 반복문을 간단하게 사용할 수 있다는 것을 알게 되었다.
https://pythonq.com/so/c%2B%2B/2592
https://torbjorn.tistory.com/265
https://boycoding.tistory.com/210
<set>
'Algorithm > 카카오기출' 카테고리의 다른 글
[프로그래머스] 오픈채팅방 / stringstream (0) | 2022.03.10 |
---|---|
[프로그래머스] 문자열 압축 / substr (0) | 2022.03.10 |
[프로그래머스]다트게임 / stringstream (0) | 2022.01.19 |
[프로그래머스]비밀지도 (0) | 2022.01.15 |
[프로그래머스] 실패율 (0) | 2022.01.14 |