[10주 완성 C++ 코딩테스트] 중복된 요소를 제거하는 방법

Taegang Yun·2023년 11월 28일
1

첫 번째 경우는
[1,1,2,2,3,3] 의 배열이 있을 때 [1, 2, 3] 과 같이 뽑아내야 한다고 해보자.

첫 번째 경우는 map을 활용하는 것이다.
{1 : 1}
{2 : 1}.. 과 같이 말이다.

int main(){
	vector<int> v{1, 1, 2, 2, 3, 3};
 	map<int, int> mp;
    
    for(int i : v){
    	if(mp[i]){
        	continue;
        }else{
        	mp[i] = 1;
        }
    }
    vector<int> ret;
    for(auto it : mp){
    	ret.push_back(it.first);
    }
    for(int i : ret) cout << i << " ";
}

unique()

범위안의 요소 중 앞에서부터 서로를 비교해가며 중복되는 요소를 제거하고 나머지 요소들은 삭제하지 않고 그대로 두는 함수. O(n)의 시간복잡도

auto it = unique(v.begin(), v.end());

중복되지 않은 요소로 채운 후, 그 다음 이터레이터를 반환한다.
예를 들어서

v = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5}
-> {1, 2, 3, 4, 5, 3, 4, 4, 5, 5} 로 만들고 5를 반환(인덱스 4의 다음)

sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end()));

profile
언젠간 전문가가 되겠지

0개의 댓글