728x90
C++์ ํด์ํ ์ด๋ธ์ unordered_map ์ด๋ผ๋ STL๋ก ๊ตฌํํ ์ ์๋ค.
* ์๊ฐ๋ณต์ก๋
ํด์ฌํ ์ด๋ธ์ key ๊ฐ์ผ๋ก ํ์ํ๊ธฐ ๋๋ฌธ์ ํ์ ์๊ฐ๋ณต์ก๋๋ O(1) ๋ฐ์ ๊ฑธ๋ฆฌ์ง ์๋๋ค. ๋ํ, ์ ๋ ฌํ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ ์ถ๊ฐ, ์ญ์ ์์๋ ๊ทธ ์ฑ๋ฅ์ด ๊พธ์คํ ๋ณด์ฅ๋๋ค.
* map vs unordered_map
map ์ ์ ๋ ฌ์ด ๋๋ค. ๋ ๋๋ธ๋ํธ๋ฆฌ๊ธฐ๋ฐ์ด๋ฏ๋ก ํ์, ์ฝ์ , ์ญ์ ์ O(longN)์ ์๊ฐ๋ณต์ก๋๊ฐ ๊ฑธ๋ฆฐ๋ค.
unordered_map ์ ์ ๋ ฌ์ด ์๋๋ค. ํด์ํ ์ด๋ธ ๊ธฐ๋ฐ์ด๋ฏ๋ก ํ์, ์ฝ์ , ์ญ์ ์ ํ๊ท O(1), ์ต์ ์ ๊ฒฝ์ฐ O(N) ์ด ๊ฑธ๋ฆฐ๋ค.
* ์ฌ์ฉ๋ฐฉ๋ฒ
#include <iostream>
#include <unordered_map>//include
using namespace std;
int main(){
unordered_map<string, int> map; //์ ์ธ
//๋ฐ์ดํฐ ์ฝ์
map.insert(make_pair("a", 1));
map.insert(make_pair("b", 2));
map.insert(make_pair("c", 3));
//๋ฐ์ดํฐ ํ์
map.find("a");
cout << "map["a"].first: " << map["a"].first; // a
cout << "map["a"].second: " << map["a"].second; // 1
map.count("a");//key๊ฐ "a"์ธ ์์์ ๊ฐ์ ๊ตฌํ๊ธฐ
//๋ฐ์ดํฐ ์ํ
for(auto& i: map){
if(i.first == "b") i.second ++; // map["b"].second = 2;
}
//๋ฐ์ดํฐ ์์
map["a"] = 2;
cout << "map["a"].second: " << map["a"].second; // 2
//๋ฐ์ดํฐ ์ญ์
map.erase("a");
//๊ธฐํ
map.empty(); // ๋น์ด์์ผ๋ฉด true, ๊ทธ๋ ์ง ์๋ค๋ฉด false๋ฅผ ๋ฐํ
map.size(); // map์ ํฌ๊ธฐ๋ฅผ ๋ฐํ
return 0;
}
*๊ด๋ จ๋ฌธ์
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
unordered_map<string, int> map;
for(auto& person : participant) map[person]++;
for(auto& person : completion) map[person]--;
for(auto& person : map) {
if(person.second != 0) {
answer = person.first;
break;
}
}
return answer;
}
728x90