이우의 개발일지
[백준/C++] 7785번 unorderd_map 활용법 및 sort하는 법 /해시 / 회사에 있는 사람 - (1) 본문
Coding/Algorithm
[백준/C++] 7785번 unorderd_map 활용법 및 sort하는 법 /해시 / 회사에 있는 사람 - (1)
공대이우 2024. 8. 13. 22:41백준 7785번 회사에 있는 사람
이 문제는 unorderd_map을 통해 어느정도 쉽게 구현이 가능한 문제입니다.
들어가기에 앞서, 먼저 unorderde_map을 어떻게 활용하냐?
void unordered_map_example(){
unordered_map<string, int> m;
m["hi"] = 123;
m["bkd"] = 1000;
m["gogo"] = 165; // ("hi", 123), ("bkd", 1000), ("gogo", 165)
cout << m.size() << '\n'; // 3
m["hi"] = -7; // ("hi", -7), ("bkd", 1000), ("gogo", 165)
if(m.find("hi") != m.end()) cout << "hi in m\n";
else cout << "hi not in m\n";
m.erase("bkd"); // ("hi", 123), ("gogo", 165)
for(auto e : m)
cout << e.first << ' ' << e.second << '\n';
}
위 코드를 보면 map에 key와 value 를 대칭해서 넣을 수 있다는 것을 확인할 수 있다.
그 안에서 find 함수와 erase 함수를 자유롭게 쓸 수 있다는 장점이 있지만, 단점으로는 해당하는 Map값이 순서대로 저장되지는 않는다는점이다.
이러한 특성을 가지고 위의 문제를 풀어보았다.
for (int i = 0; i < n; i++) {
string st1;
string st2;
cin >> st1 >> st2;
m[st1] = st2;
}
//sort(m.begin(), m.end(), cmp);
for (auto e : m) {
if (e.second == "enter") str.push_back(e.first);
}
먼저, 차례대로 값을 mapping 시켜준 다음 문제의 주어진 조건 중에 enter, 즉 값이 존재하는 경우만을 vector<string> str 변수에 넣어주었다.
아까 위에서 unordered_map은 값을 넣어준다고 해서 차례대로 들어가는 것이 아니기때문에 만약 정렬을 해야한다면 이렇게 값을 따로 빼서 다른 변수에 넣어주는 것이 좋다.
sort(str.begin(), str.end(),cmp);
for (int i = 0; i < str.size(); i++) {
cout << str[i] << '\n';
}
그런 다음, 이렇게 sort를 해서 원하는 조건에 맞춰 정렬을 해주고, 출력을 해주면 끝!
7785 회사에 있는 사람 전체 코드
#include<iostream>
#include<unordered_map>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
unordered_map<string, string> m;
vector<string> str;
bool cmp(string & a, string & b) {
return a > b;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string st1;
string st2;
cin >> st1 >> st2;
m[st1] = st2;
}
//sort(m.begin(), m.end(), cmp);
for (auto e : m) {
if (e.second == "enter") str.push_back(e.first);
}
sort(str.begin(), str.end(),cmp);
for (int i = 0; i < str.size(); i++) {
cout << str[i] << '\n';
}
return 0;
}
반응형
'Coding > Algorithm' 카테고리의 다른 글
동적계획법 - DP (Dynamic Programming) 알고리즘 (0) | 2024.11.12 |
---|---|
[Design pattern] RAII(Resource Acquisition Is Initialization) 리소스 획득 초기화 (1) | 2024.11.07 |
[백준/C++] 1806번 부분합 /투 포인터/two_pointer - (1) (0) | 2024.08.09 |
[백준/C++] 2559번 수열 /투 포인터 알고리즘/ two_pointer - (1) (0) | 2024.08.09 |
[SWEA/C++] 1859 백만 장자 프로젝트 (0) | 2024.08.08 |