programmers
2022 KAKAO BLIND RECRUITMENT > 신고 결과 받기 + 중복제거하는법
윤만석
2022. 7. 28. 13:55
lv1 문제입니다.
같은 신고가 들어왔을 수도 있으므로 중복제거를 해주어야합니다.
이때 erase, unique를 이용한 중복제거를 하기 전에 sort를 반드시 해야합니다.
#include <string>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
int findidx(string str){
for(int i=0;i<str.length();i++){
if(str[i]==' ')return i;
}
}
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
vector<int> answer(id_list.size(),0);
vector<int>arr;
string send;
string rece;
int s,r,j,len;
vector<int>rep[1002];
for(int i=0;i<report.size();i++){
len=findidx(report[i]);
send=report[i].substr(0,len);
rece=report[i].substr(len+1);
for(j=0;j<id_list.size();j++){
if(id_list[j]==send){
s=j;
}
else if(id_list[j]==rece){
r=j;
}
}
rep[r].push_back(s);
}
//중복제거
for(int i=0;i<id_list.size();i++){
sort(rep[i].begin(),rep[i].end());
rep[i].erase(unique(rep[i].begin(),rep[i].end()),rep[i].end());
}
for(int i=0;i<id_list.size();i++){
if(rep[i].size()>=k){
for(int j=0;j<rep[i].size();j++){
answer[rep[i][j]]++;
}
}
}
return answer;
}
vector에서 중복제거하는 방법은 다음과 같습니다
<algorithm>라이브러리가 필요합니다
vector<int> arr;
arr=[3,6,8,9,2,1,7,5,4]일때
sort(arr.begin(),arr.end());
arr.erase(unique(arr.begin(),arr.end()),arr.end());
sort(iter_begin,iter_end)
sort 는 vector의 요소를 크기순으로 나열해줍니다.
unique(iter_begin,iter_end)
unique는 vector의 요소중 중복되는 요소를 꺼내서 vector의 맨 뒤에 넣어줍니다.
같은 값이 나란히 붙어있어야 제대로 작동하기때문에 앞에서 sort를 해주어야 합니다...
arr.erase(iter_begin,iter_end)
iter_begin부터 iter_end까지 지워줍니다