https://www.acmicpc.net/problem/16165
std::map 을 활용해서 해결한 문제.
입력 범위가 작아서 매번 비교대조하면서 해결해도 괜찮겠다만,
편리하고 깔끔하게 풀기 위해서는 std::map을 사용하면 좋다.
std::map 으로 문자열과 숫자 인덱스를 서로 매칭시켜 줄 수도 있고,
teamName[Name[i]] = i;
어떠한 팀 $M_i$ 에 어떠한 사람이 포함되어있는지도 맵을 사용하면 깔끔하게 판별할 수 있다.
if(member[i].find(s) != member[i].end())
대충 보고 풀어서
풀이를 좀 더 개선할 여지가 보이기는 하는데,
일단 이정도면 AC를 받는데 크게 문제가 없다.
#include <bits/stdc++.h>
using namespace std;
string Name[123];
map<string,int> teamName;
map<string,int> member[123];
int main(){
cin.sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N,M,K,Q;
string s;
cin >> N >> M;
for(int i=1; i<=N; i++){
cin >> Name[i] >> K;
teamName[Name[i]] = i;
for(int j=0; j<K; j++){
cin >> s;
member[i][s] = 1;
}
}
for(int i=0; i<M; i++){
cin >> s >> Q;
if(Q == 0){
for(auto k : member[teamName[s]]){
cout << k.first << "\n";
}
}
if(Q == 1){
for(int i=1; i<=N; i++){
if(member[i].find(s) != member[i].end()){
cout << Name[i] << "\n";
}
}
}
}
return 0;
}
반응형