중복된 요소 제거

Kim Yuhyeon·2023년 4월 25일
0

알고리즘 + 자료구조

목록 보기
100/161

중복된 요소 제거


Map 사용

map<int, int> mp;

int main() {
   vector<int> v{1, 1, 2, 2, 3, 3};
   
   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 << '\n';
  
}

unique()

범위 안에 있는 요소 중 앞에서부터 서로를 비교해가며 중복되는 요소를 제거하고
나머지 요소들은 삭제하지 않고 그대로 두는 함수

  • 시간복잡도 : O(n)
vector<int> v;

int main () {
   for(int i = 1; i <= 5; i++){
      v.push_back(i);
      v.push_back(i);
   }
   for(int i : v) cout << i << " "; // 1 1 2 2 3 3 4 4 5 5
   cout << '\n';
   // 중복되지 않은 요소로 채운 후, 그 다음 이터레이터를 반환한다.
   auto it = unique(v.begin(), v.end()); // 5
   cout << it - v.begin() << '\n';
   // 앞에서 부터 중복되지 않게 채운 후 나머지 요소들은 그대로 둔다.
   for(int i : v) cout << i << " "; // 1 2 3 4 5 3 4 4 5 5
   cout << '\n';  
   return 0;
}
vector<int> v {1, 1, 2, 2, 3, 3, 5, 6, 7, 8, 9};
int main () {
   auto it = unique(v.begin(), v.end());
   for(int i : v) cout << i << " "; // 1 2 3 5 6 7 8 9 7 8 9
   cout << '\n';
   return 0;
}

앞의 경우처럼 앞에서부터 서로를 비교해가며 중복된 요소를 제거하기 때문에
sort(), erase(unique())를 함께 써야 중복된 수를 제거한 배열이 나오게 됩니다.

vector<int> v {2, 2, 1, 1, 2, 3, 3, 4, 5, 6, 7, 8};

int main() {
   sort(v.begin(), v.end());
   v.erase(unique(v.begin(), v.end()), v.end()); 
   for(int i : v) cout << i << " "; // 1, 2, 3, 4, 5, 6, 7, 8, 9
   cout << '\n';
   return 0;
}

0개의 댓글