코딩 공부 연습
백준 16165 - 걸그룹 마스터 준석이
miffy짱
2022. 10. 10. 14:43
반응형
문제 이름이 이상해서 풀기 싫었는데 풀었다!
set, map을 활용하는 문제였는데, 더 좋은 풀이가 있을 것 같다.
우선 사람 이름을 통해 그룹을 찾는 경우는 그냥 하나의 map에 <이름-그룹명> 으로 짝지은 쌍을 다 집어넣어서 find를 통해 바로 그룹명을 찾아냈다.
반대로 그룹명을 주고 그 그룹에 속한 사람들 이름을 다 찍어내야 하는 경우에는
map <string, set<string>>
이렇게 선언하여 '블랙핑크' 그룹에 속해있는 인원 a, b, c, d를 set안에 모두 담았다.
#include <iostream>
#include <vector>
#include <map>
#include <set>
using namespace std;
int main()
{
int n, m;
map <string, string> names;
map <string, set<string>> groups;
cin >> n >> m;
for(int i = 0; i< n; i++)
{
string g_name;
string tmp;
set <string> tmp_set;
int g_nums;
cin>>g_name;
cin>>g_nums;
for(int j =0; j< g_nums; j++)
{
cin>>tmp;
names.insert({tmp, g_name});
tmp_set.insert(tmp);
}
groups.insert({g_name,tmp_set});
}
for(int i = 0; i< m; i++)
{
string q;
int o_z;
cin>> q;
cin>>o_z;
if (o_z == 1)
{
auto found = names.find(q);
cout<<found->second<<'\n';
}
else if (o_z == 0)
{
set<string> found = groups.find(q)->second;
for(auto iter = found.begin(); iter != found.end(); iter++)
cout<<*iter<<'\n';
}
}
return 0;
}
map에 set을 value로 집어넣는게 문법이 아직도 익숙치 않아서 쫌 걸렸는데, set 을 이용했기 때문에 자동으로 사전순으로 저장이 되었기 때문에 바로 문제를 해결할 수 있었다!!!