์ฝ๋ฉํ ์คํธ์์ ์ค๋ณต์๋ ๊ฐ์ ์ถ๋ ฅํ๋ผ๊ณ ํ ๋, map ์ด๋ unique ํจ์๋ฅผ ์ด์ฉํ๋ค.
1. map
#include <iostream>
#include <map>
#include <vector>
using namespace std;
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';
}
2. unique()
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
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 << " ";
cout << '\n';
// ์ค๋ณต๋์ง ์์ ์์๋ก ์ฑ์ด ํ, ๊ทธ ๋ค์ ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ฐํํ๋ค.
auto it = unique(v.begin(), v.end());
cout << it - v.begin() << '\n';
// ์์์ ๋ถํฐ ์ค๋ณต๋์ง ์๊ฒ ์ฑ์ด ํ ๋๋จธ์ง ์์๋ค์ ๊ทธ๋๋ก ๋๋ค.
for (int i : v) cout << i << " ";
cout << '\n';
//unique()์ iterator์์ ๋ฒกํฐ ๋๊น์ง๋ฅผ erase()๋ก ์ง์์ฃผ๋ฉด ๋๋ค.
v.erase(it, v.end());
for (int i : v) cout << i << " ";
cout << '\n';
return 0;
}
1 1 2 2 3 3 4 4 5 5
5
1 2 3 4 5 3 4 4 5 5
1 2 3 4 5
* unique(): ๋ฒ์ ์์ ์์ ์ค ์ฐ์๋ ์์๋ฅผ ์ง์ฐ๊ณ ๋๋จธ์ง ์์๋ค์ ์ญ์ ํ์ง ์๊ณ ๊ทธ๋๋ก ๋๋ ํจ์.
O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง.
์ฆ, unique() ๋ก ์ค๋ณต๋ ์์๋ฅผ ์ฐพ์์ ์ ๋ ฌํ๊ณ ์ฐพ์๊ณณ ๋ค๋ถํฐ ๋๊น์ง๋ฅผ erase() ํ๋ฉด ์ค๋ณต๋ ์์๊ฐ ์ ๊ฑฐ๋๋ค.
์ด ๋, ๋๋จธ์ง ์์๋ค์ ์ญ์ ํ์ง ์๊ณ ๊ทธ๋๋ก ๋๊ธฐ ๋๋ฌธ์ sort() ๋ฅผ ๋จผ์ ํ๊ณ ํ๋ฉด ์ค๋ณต๋ ์๋ฅผ ๋ชจ๋ ์ ๊ฑฐํ ๋ฐฐ์ด์ด ๋์จ๋ค.
* hash map ์ฐธ๊ณ ๋ฌธ์ ๋ฐ ํ์ฉ์์
https://i-believe-in-me.tistory.com/224
ํฌ์ผ๋ชฌ์ 2/n ๊ฐ ์ ํํ์ ๋, ์ ํํ ์ ์๋ ํฌ์ผ๋ชฌ ์ข ๋ฅ์ ์ต๋๊ฐ์ ๊ตฌํด์ผ ํ๋ฏ๋ก ํฌ์ผ๋ชฌ ์ข ๋ฅ๋ณ๋ก count ํ hash map์ด ํ์ํ๋ค.
* unique(), erase() ์ฐธ๊ณ ๋ฌธ์ ๋ฐ ํ์ฉ์์
https://i-believe-in-me.tistory.com/229
๋จ์ํ ์ฐ์๋ ์ซ์๋ฅผ ์ง์ฐ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ฏ๋ก unique(), erase() ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.