https://school.programmers.co.kr/learn/courses/30/lessons/1845
ํด๊ฒฐ๋ฒ
ํฌ์ผ๋ชฌ ๋ฒํธ์ ๊ฐ์๋ฅผ ์ค๋ณต์์ด ์ ์ฅํด์ ๋ฝ๋ ๊ฐ์๋๋น ์ต๋ ๋ฝ์ ์ ์๋ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ค.
์ค๋ณต์์ด ์ ์ฅํด์ ๊ฐ์๋ฅผ ์ฐพ๋๊ฑฐ๋ผ Hash์ ์ ํ์ ์ธ ๋ฌธ์ ๋ค.
Hash Map์ผ๋ก ๊ฐ์ ์ค๋ณต์์ด ์ ์ฅํ๊ณ ํด์ฌ๊ธธ์ด์ ๋ฝ์ ๊ฐ์์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํด์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์์๋ ๊ฒ
1. C++์ foreach๋ฌธ
for (auto i : ๋ฐฐ์ด/๋ฒกํฐ์ด๋ฆ)
C++11๋ถํฐ ์ง์๊ฐ๋ฅ !
2. unordered_map
- key - value ์กฐํฉ์ผ๋ก ๊ฐ์ ์ ์ฅํ๋ ๊ตฌ์กฐ.
- ํด์ ํ ์ด๋ธ ํํ์ด๋ฏ๋ก ์๋ ์ ๋ ฌ๋์ง ์์์ ์ ๋ ฌ์ด ํ์์์ ๋ ์ฌ์ฉํ๋ฉด ์ข๋ค.
- O(1)์ ๊ฒ์, ์ญ์ , ์์ , ์ฝ์ ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
#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;
}
3. unordered_set
- Key ๋ฐ์ดํฐ๊ฐ Set์ ์กด์ฌํ๋์ง๋ฅผ ํ๋จํ๊ณ ์ถ์ ๋ ์ฌ์ฉ. ์งํฉ๊ฐ์ ๋๋ !
- Map์ Key๊ฐ ํน์ Value์ ๋์๋์ง๋ง, Set์ Key๋ง ๊ฐ์ง๋ฏ๋ก ์ค๋ณต์ ์ฅ์ด ํ์์๋ Key๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉํ๋ค.
- ๊ฐ์ ์์๊ฐ ์ด๋ฏธ ๋ค์ด์๋ค๋ฉด ๋์ค์ ๋ค์ด์ค๋ insert๋ ๋ฌด์ํ๋ค.
#include <bits/stdc++.h>
using namespace std;
int solution(vector<int> nums) {
unordered_set<int> s(nums.begin(), nums.end());
return min(nums.size() / 2, s.size());
}
- ๋ค๋ฅธ๋ถ์ด ์์ฒ๋ผ unordered_set์ผ๋ก 2์ค๋ง์ ๊ตฌํํ๊ธธ๋ unordered_set๋ ์์๋์.
์ฝ๋
#include <vector>
#include <unordered_map>
using namespace std;
int solution(vector<int> nums){
int answer = 0;
unordered_map<int, int> pocketmons;
//ํฌ์ผ๋ชฌ ์ข
๋ฅ ์ถ๊ฐ
for (auto num : nums){
pocketmons.insert(make_pair(num, 0));
}
//ํฌ์ผ๋ชฌ ๊ฐ์ ์ถ๊ฐ
for (auto pocketmon : pocketmons){
pocketmon.second++;
}
//์ต๋ ํฌ์ผ๋ชฌ ์ ํ ๊ฐ์ ์ฐพ๊ธฐ
if(pocketmons.size() > nums.size()/2){
answer = nums.size()/2;
}
else if(pocketmons.size() < nums.size()/2){
answer = pocketmons.size();
}
else answer = nums.size()/2;
return answer;
}
์ง๊ด์ ์ผ๋ก ์ง์ ๋ถํ๊ฒ ์ง๊ณ ๋ค๋ฅธ ์ฌ๋ ์ฝ๋๋ณด๊ณ ์ต์ ํ ํ๋ค.
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
int solution(vector<int> nums){
int answer = 0;
unordered_map<int, int> pocketmons;
//ํฌ์ผ๋ชฌ ์ข
๋ฅ&๊ฐ์ ์ถ๊ฐ
for (auto num : nums){
pocketmons[num]++;
}
//์ต๋ ํฌ์ผ๋ชฌ ์ ํ ๊ฐ์ ์ฐพ๊ธฐ
answer = min(pocketmons.size(), nums.size()/2);
return answer;
}
์ด๊ฑด ์ต์ ํ ์ฝ๋. unordered_map์ ๊ตฌ์ง insert ๋ฌธ์ ์์ฐ๊ณ ๋ ๊ฐ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ค๋๊ฑธ ๊ธฐ์ตํด๋์.
'๐ Coding Test Study > Algorithm Problem' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++][Programmers][์คํ/ํ] ๊ฐ์ ์ซ์๋ ์ซ์ด (0) | 2023.05.18 |
---|---|
[C++][Programmers][ํด์] ์์ (feat. hash map ๋ฐ๋ณต๋ฌธ) (0) | 2023.05.16 |
[C++][Programmers][DFS/BFS] ์ฌํ๊ฒฝ๋ก (0) | 2023.05.09 |
[C++][Programmers][DFS/BFS] ๋จ์ด ๋ณํ (0) | 2023.05.07 |
[C++][Programmers][DFS/BFS] ๋คํธ์ํฌ (0) | 2023.05.06 |