문제
소스코드
#include<iostream>
#include<map>
#include<string>
#include<vector>
#include<algorithm>
constexpr int TOTAL_GROUP = 100;
constexpr int TOTAL_PROBLEM = 100;
using groups_pair = std::pair < std::string, std::vector<std::string>>;
using members_pair = std::pair < std::string, std::string>;
std::map<std::string, std::vector<std::string>> g_members;
std::map<std::string, std::string> g_groups;
std::vector<std::string> g_solution;
// map에 걸그룹 정보를 넣는다.
void InsertGroupInfor() {
int total_member{};
std::string group_name{};
std::string member_name{};
std::vector<std::string>group_members;
std::cin >> group_name;
std::cin >> total_member;
for (int i = 0; i < total_member; ++i) {
std::cin >> member_name;
group_members.emplace_back(member_name);
//해당 멤버의 그룹 정보를 넣는다.
g_groups.emplace(members_pair{ member_name,group_name });
}
//해당 그룹의 멤버들의 정보를 넣는다.
g_members.emplace(groups_pair(group_name, group_members));
}
// map에 있는 정보를 토대로 값을 찾는다.
void ProcessProblumes() {
int select{};
std::string name{};
std::cin >> name;
std::cin >> select;
//0-> DisPlay All member
if (select == 0) {
auto iter = g_members.find(name)->second;
std::sort(iter.begin(), iter.end(), [](const auto& lhs, const auto& rhs) {return lhs < rhs; });
std::copy(iter.begin(), iter.end(), std::back_inserter(g_solution));
}
// 1-> DisPlay Team
else {
auto iter = g_groups.find(name)->second;
g_solution.emplace_back(iter);
}
}
int main() {
int N{}, M{};
std::cin >> N >> M;
for (int i = 0; i < N; ++i)
InsertGroupInfor();
for (int i = 0; i < M; ++i)
ProcessProblumes();
for (const auto& i : g_solution)
std::cout << i << "\n";
}
후기
이 문제를 해결하기 위한 키워드는 2가지이다.
1. 걸그룹 팀명에 따른 멤버들을 넣거나, 멤버에 대한 팀명을 넣어야 한다.
InsertGroupInfor() 메서드에 해당 내용을 구현하였다.
이 문제는 두개의 map을 사용해서 문제를 풀었는데
팀 이름을 입력했을 때에 해당 팀에 멤버들을 넣을 수 있는 g_members와
멤버 이름을 입력했을 때 해당 멤버가 속한 그룹 명을 넣을 수 있는 g_groups를 만들었다.
2. 퀴즈에 대한 정보 값을 출력한다.
ProcessProblumes() 메서드에 해당 내용을 구현하였으며 모든 입력값에 따른 출력을 나중에 진행해야 하기 때문에
출력용 Vector인 g_solution을 사용하였다.
0이 입력되면 g_groups에 name을 key로 하여 해당 멤버의 팀 정보를 g_solution에 넣었다.
1이 입력되면 g_members에 name을 key로 하여 정렬 후 해당 그룹의 멤버 정보를 std::copy()로 g_solution에
복사하였다.
출처 및 레퍼런스
문제 링크:https://www.acmicpc.net/problem/16165
'온라인 코딩 > 기타(Other)' 카테고리의 다른 글
[백준] 2480번 주사위 세개 (0) | 2020.04.28 |
---|---|
[백준] 9655번 돌 게임 (0) | 2020.04.25 |
[백준] 17224번 APC는 왜 서브태스크 대회가 되었을까? (0) | 2020.03.19 |
[백준] 17389번 보너스 점수 (0) | 2020.03.18 |
[구름 IDE] 비타알고 시즌2 시공의 폭풍 속으로 (★1) (0) | 2020.03.11 |