basic-algo-lecture/workbook/0x15.md at master · encrypted-def/basic-algo-lecture
basic-algo-lecture/workbook/0x15.md at master · encrypted-def/basic-algo-lecture
바킹독의 실전 알고리즘 강의 자료. Contribute to encrypted-def/basic-algo-lecture development by creating an account on GitHub.
github.com
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <limits>
#include <unordered_set>
#include <unordered_map>
#include <queue>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
// 그룹 이름으로 멤버 찾기
unordered_map<string, vector<string>> groupToMem;
// 멤버 이름으로 그룹 찾기
unordered_map<string, string> memToGroup;
for (int i = 0; i < n; i++) {
string group;
cin >> group;
int num;
cin >> num;
groupToMem[group] = vector<string>(num);
for (int i = 0; i < num; i++) {
string member;
cin >> member;
groupToMem[group][i] = member;
memToGroup[member] = group;
}
// 이름을 사전순으로 정렬
sort(groupToMem[group].begin(), groupToMem[group].end());
}
// 퀴즈 맞추기!
for (int i = 0; i < m; i++) {
string input;
int quizNum;
cin >> input >> quizNum;
// 그룹의 모든 멤버 이름 출력
if (quizNum == 0) {
for (string member : groupToMem[input]) {
cout << member << "\n";
}
}
else {
// 그룹 이름 출력
cout << memToGroup[input] << "\n";
}
}
return 0;
}
그룹 이름으로는 멤버들을 찾을 수 있게, 멤버 이름으로는 그룹을 찾을 수 있도록 하기 위해 groupToMap, memToGroup 을 선언했다.
groupToMem 은 그룹 이름을 키로 가지고, vector<string> 으로 멤버들을 밸류로 갖는다. memToGroup 은 멤버 이름을 키로 가지고 그룹 이름을 밸류로 갖는다.
마지막에 퀴즈를 맞힐 때 주어진 퀴즈 번호가 0이면 그룹 이름이 주어지고, 1이면 멤버 이름이 주어진다고 했다. 즉 0일 때는 그룹 이름으로 groupToMem 에서 vector<string> 을 찾아와서 멤버 이름을 다 출력한다. 1일 때는 주어진 그룹 이름으로 memToGroup 에 접근해서 그룹 이름을 가져와 출력한다.