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까지 지워줍니다