본문 바로가기

Algorithm/Programers - C++

[프로그래머스] 같은 숫자는 싫어 / unique

문제

 

풀이

#include <vector>
#include <iostream>

using namespace std;

vector<int> solution(vector<int> arr) 
{
    vector<int> answer(1,arr[0]);
    for(int i=1; i<arr.size(); i++){
        if(answer.back() != arr[i]) answer.push_back(arr[i]);
    }
    return answer;
}

 

 


 

다른 사람 풀이

#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

vector<int> solution(vector<int> arr) 
{
    arr.erase(unique(arr.begin(), arr.end()),arr.end());
    vector<int> answer = arr;
    return answer;
}

위와 같이 unique를 사용하면 같은 결과를 가져올 수 있었다.

 

 

 

unique 함수

- vector 배열에서 중복되지 않는 원소들을 앞에서부터 채워나가는 함수이다.

- algorithm 헤더에 존재한다.

- 중복되지 않는 원소들을 앞에서부터 채워나가기 때문에 나머지 뒷부분에는 원래 vector 원소 값이 존재한다.

 

 

erase 함수

- erase 함수는 vector 배열에서 특정 원소를 삭제하는 함수이다.

- v.erase(v.begin()+s, v.begin()+e) 명령어를 입력하면 [s,e) 원소가 삭제된다.

 

 

arr.erase(unique(arr.begin(), arr.end()),arr.end());

- unique가 끝나면, vector의 쓰레기 값의 첫 번째 위치를 반환하기 때문에, 위의 함수를 사용함으로써 중복된 숫자를 제거한 벡터 값을 얻을 수 있다.

 

 

 

 


https://dpdpwl.tistory.com/39

 

[C++]벡터 중복제거(sort,unique,erase)

벡터에서 중복 원소제거가 필요할 때가 있습니다. 그럴때 sort,unique,erase 의 기능을 적절히 활용하여 중복원소를 제거 할 수 있습니다. 먼저 백터하나를 만든뒤 데이터를 막넣습니다. (algorithm 을 i

dpdpwl.tistory.com