본문 바로가기
알고리즘/개념정리

알고리즘(C++) / 벡터(vector) 중복제거 : unique

by clean_h 2021. 7. 1.
728x90

벡터(vector) 중복제거 unique

벡터에서 중복되는 수 제거가 필요할 때가 있다.

그럴경우에 unique를 사용하여 중복되는 수를 제거할 수 있다. 

 

만약 벡터에 수가 { 1,1,3,3,0,1,1 }가 저장되어있다고 하면 unique 함수를 사용한 후에는 벡터에 {1, 3, 0, 1, 0, 1, 1 } 과 같이 저장되어 있다. 

빨간색 부분은 벡터에 존재하는 수이고 파란색 부분은 원래 벡터에서 바뀌지 않은 부분이다. 

이때 algorithm 헤더를 선언해주어야한다.

vector<int> arr = {1,1,3,3,0,1,1};

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

 

erase함수는 벡터를 원하는 위치를 지워준다.

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

따라서 다음과 같이 사용하면 unique해서 정렬된 다음부터 벡터의 끝까지 지워주게 되어 중복되는 부분을 제거할 수 있다. 

 

 

프로그래머스 문제  같은 숫자는 싫어에서 unique를 이용하여 문제를 해결할 수 있다. 

https://programmers.co.kr/learn/courses/30/lessons/12906?language=cpp 

 

코딩테스트 연습 - 같은 숫자는 싫어

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은

programmers.co.kr

//프로그래머스 같은숫자는싫어
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> arr)
{
    vector<int> answer;

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

    for (int i = 0; i < arr.size(); i++) {
        cout << arr[i] << "\n";
    }

    return answer;
}

int main() {
    vector<int> arr = { 1,1,3,3,0,1,1 };

    solution(arr);

    return 0;
}

{1, 3, 0, 1} 결과는 다음 같이 나온다

728x90

댓글