본문 바로가기
알고리즘/백준

[백준 16165] 걸그룹 마스터 준석이 (C++)

by fortissimo 2024. 4. 20.

https://www.acmicpc.net/problem/16165

 

16165번: 걸그룹 마스터 준석이

정우는 소문난 걸그룹 덕후이다. 정우의 친구 준석이도 걸그룹을 좋아하지만 이름을 잘 외우지 못한다는 문제가 있었다. 정우는 친구를 위해 걸그룹 개인과 팀의 이름을 검색하여 외우게 하는

www.acmicpc.net

문제


정우는 소문난 걸그룹 덕후이다. 정우의 친구 준석이도 걸그룹을 좋아하지만 이름을 잘 외우지 못한다는 문제가 있었다. 정우는 친구를 위해 걸그룹 개인과 팀의 이름을 검색하여 외우게 하는 퀴즈 프로그램을 만들고자 한다.

 

입력


첫 번째 줄에는 총 입력 받을 걸그룹의 수 N(0 < N < 100)과 맞혀야 할 문제의 수 M(0 < M < 100)을 입력받는다.

두 번째 줄부터는 각 걸그룹마다 팀의 이름, 걸그룹의 인원 수, 멤버의 이름을 한 줄씩 차례대로 입력받는다. 팀과 멤버의 이름은 최대 100글자이며, 모든 글자는 알파벳 소문자이다. 하나의 걸그룹이나 서로 다른 두 걸그룹에 이름이 같은 두 멤버가 있는 경우는 없다.

그 다음 줄부터는 M개의 퀴즈를 입력받는다. 각각의 퀴즈는 두 줄로 이루어져 있으며, 팀의 이름이나 멤버의 이름이 첫 줄에 주어지고 퀴즈의 종류를 나타내는 0 또는 1이 두 번째 줄에 주어진다. 퀴즈의 종류가 0일 경우 팀의 이름이 주어지며, 1일 경우 멤버의 이름이 주어진다.

 

출력


첫 번째 줄부터 차례대로 퀴즈에 대한 답을 출력한다. 퀴즈의 종류가 0일 경우 해당 팀에 속한 멤버의 이름을 사전순으로 한 줄에 한 명씩 출력한다. 퀴즈의 종류가 1일 경우 해당 멤버가 속한 팀의 이름을 출력한다.

 

문제 풀이


map을 이용한 문제.

<그룹, 멤버들을 저장한 자료구조>와 <멤버 이름, 그룹>을 저장하는 map을 각각 생성하여 입력받은 것들을 모두 저장한다.

퀴즈의 종류가 0이면 <그룹, 멤버들을 저장한 자료구조>에서 모든 멤버의 정보를 가져와 출력하고, 퀴즈의 종류가 1이면  <멤버 이름, 그룹>에서 해당 멤버의 그룹을 출력한다.

 

아래는 코드.

더보기
#include <iostream>
#include <map>
#include <vector>
#include <set>
using namespace std;

int main()
{
	cin.tie(NULL);
	ios::sync_with_stdio(false);

	int N, M, groupMembers, query;
	string groupName, personName, queryContent;
	cin >> N >> M;
	map<string, string> memberToGroup;
	map<string, set<string>> groupToMember;
	for (int i = 0; i < N; i++)
	{
		cin >> groupName;
		cin >> groupMembers;
		set<string> temp;
		for (int j = 0; j < groupMembers; j++)
		{
			cin >> personName;
			memberToGroup.insert({ personName, groupName });
			temp.insert(personName);
		}
		groupToMember.insert({ groupName, temp });
	}
	for (int i = 0; i < M; i++)
	{
		cin >> queryContent;
		cin >> query;
		if (query == 0)
		{
			set<string> members=groupToMember.find(queryContent)->second;
			for (set<string>::iterator it = members.begin(); it != members.end(); it++)
			{
				cout << *it << "\n";
			}
		}
		else
		{
			cout << memberToGroup.find(queryContent)->second << "\n";
		}
	}
	return 0;
}

 

'알고리즘 > 백준' 카테고리의 다른 글

[백준 1676] 팩토리얼 0의 개수 (C++)  (0) 2024.04.22
[백준 1822] 차집합 (C++)  (0) 2024.04.21
[백준 7785] 회사에 있는 사람 (C++)  (0) 2024.04.19
[백준 18110] solved.ac (C++)  (0) 2024.04.18
[백준 9252] LCS 2 (C++)  (0) 2024.04.16