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
//프로그래머스 같은숫자는싫어
#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
'알고리즘 > 개념정리' 카테고리의 다른 글
알고리즘(C++) / string 자르기 : stringstream, 문자열 파싱istringstream, ostringstream (0) | 2021.08.22 |
---|---|
알고리즘(C++) / 문자 대소문자 판별, 숫자 판별, 공백 판별 (0) | 2021.08.04 |
알고리즘 / unordered_map (0) | 2021.06.26 |
알고리즘 / DFS(Depth First Search), BFS(Breath First Search) (0) | 2021.04.10 |
알고리즘(C++) / cin, cout 입출력 속도 높이기 (0) | 2021.04.10 |
댓글