일단 내가 지금 따라가고 있는 바킹독 알고리즘 강의에서는, unordered_set, unordered_multiset(중복허용), unordered_map 까지만 설명해주고, unordered_multimap의 경우는 유용하게 사용해본 적이 없다고 그냥 3가지만 이해하고 잘 활용하면 된다는 방향으로 설명을 해주어서, unordered_map 하나만 알고 있고 그 내에서 중복을 허용하는 형태로는 어떻게 해야하는지 알 지 못하는 단계였는데,
이번에 접하게 된 boj 16165번 문제를 통해서 마치 내부적으로 중복을 허용하는듯이, 유사하게 써먹을 수 있는 방법을 접하게 되어서 이렇게 기록을 해두면서 다시 한번 더 공부해보려 한다.
만약 스트링과 인덱스, 형태에서 인덱스를 통해 스트링을 찾아야 하면,
스트링 배열을 선언해서 그 스트링 배열에 인덱스별로(int) string을 담아서 마치 int 라는 키값에 대응되는 string 값을 찾듯이 배열을 바로바로 써먹을 수 있는 풀이가 있는데, 이 문제의 경우는 string 과 string에 대한 문제여서 배열을 이용한다거나 해서 인덱스를 저장하는 형식으로는 사용할 수 없었다.
그런데 내가 접한 코드는,
int n, m, mems;
string team, member;
unordered_map<string, string> m2t;
unordered_map<string, vector<string>> t2m;
cin>>n>>m;
while(n--){
cin>>team>>mems;
while(mems--){
cin>>member;
m2t[member]=team;
t2m[team].push_back(member);
}
sort(t2m[team].begin(),t2m[team].end());
}
이런식으로 또 하나의 unordered_map<string, vector<string>> 타입으로 설정해서,
string(key 값) 에 대응되는 vector<string> 컨테이너를 담아서, 그 vector컨테이너에 같은 키값일 경우 vector의 내부로 push_back 하여서 마치 중복을 허용하는 unordered_multimap 같은 형태로 unordered_map을 만들어내서 문제 풀이에 활용하는 풀이였다.
이렇게 되면 string(key가 하나. 예 -twice) 을 통해서 그 key에 있는 value ( 이 경우 vector<string> 컨테이너) 의 원소들에 접근해서 모든 팀원들의 이름을 뽑아낼 수 있는 경우로 만들 수 있었다.
인덱스와 string 같은 형태면 배열을 통한 코드 작성법을,
만약 stirng string 형태에서 역방향으로 출력을 해야 하는 경우,
이렇게 새로운 unordered_map을 선언하고, 그 원소로 string, vecotr<string> 형태로 만들어서, vecotr<string> 컨테이너에 원소들을 저장해서 마치 중복을 허용하는 unordered_multimap을 사용하는 것처럼 만들어서 사용해보도록 하자.
**일단 이 글을 작성할때 중복을 허용하는 unordered_multimap을 사용하는 것처럼 이라는 표현을 사용하고 있는데,
현재 이 글을 작성할때 unodrered_multimap에 대한 정확한 개념공부를 완료한 것이 아니라 부정확한 표현일 수 있다.
개념적으로 multiset과 set의 차이점에서 유추하여서 설명에 참고해 보았다.
'알고리즘 > BOJ' 카테고리의 다른 글
boj 19583번 문제를 통해 접하게 된 cin.eof()과 이것의 활용 방법. (0) | 2023.06.22 |
---|---|
boj 11478번 문제를 통해 접하게 된 substr() 함수와 그 함수의 활용에 관하여. (0) | 2023.06.22 |
boj 13414번 문제를 통해 익히는 unordered_map의 find() 함수와, min() 함수에 사용하는 (int) size() 함수에 대하여. (0) | 2023.06.20 |
boj 7785번 문제를 통해 접하게된 unordered_set과 sort에 관하여. (0) | 2023.06.20 |
boj 22862번 문제를 통해 접하게된 짝수일때, 홀수일때 수를 경우의 수를 더하는 방법에 대하여. (0) | 2023.06.18 |