백준 16165 c++

magicdrill·2024년 6월 1일
0

백준 문제풀이

목록 보기
361/655

백준 16165 c++

map 컨테이너의 새로운 사용방법과 find함수의 활용, 반복자 활용을 연습해본 좋은 문제였다. 여러번 복습해 보겠다.
아쉬운 점은 변수명을 너무 비슷하게 주는 바람에 나중에는 스스로 헷갈렸다. 변수규칙을 개인적으로 더 확실하게 잡겠다.

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>

using namespace std;

//map의 새로운 사용법
void input_member(map <string, vector<string>> &group_member, vector<pair<int, string>> &question)
{
	int N, M;
	int i, member_num, j;
	string group_name;
	string member_name;
	int question_type;
	string question_str;

	cin >> N >> M;
	//그룹정보 저장
	for (i = 0; i < N; i++)
	{
		cin >> group_name;
		cin >> member_num;
		for (j = 0; j < member_num; j++)
		{
			cin >> member_name;
			group_member[group_name].push_back(member_name);
			//기본적으로는 입력 순으로 저장됨... 출력때는 알파벳순으로 정렬해야함
		}
		//저장된 벡터 정렬
		sort(group_member[group_name].begin(), group_member[group_name].end());
	}
	//문제 입력
	for (i = 0; i < M; i++)
	{
		cin >> question_str;
		cin >> question_type;
		question.push_back({ question_type, question_str });
	}

	/*
	cout << "\n\n";
	for (auto group : group_member)
	{
		cout << group.first << "\n";
		for (auto member : group.second)
		{
			cout << member << " ";
		}
		cout << "\n";
	}
	*/

	return;
}

void find_answer(map <string, vector<string>>& group_member, vector<pair<int, string>>& question)
{
	int i;
	int j, k;
	string group_name, member_name;

	for (i = 0; i < question.size(); i++)
	{
		if (question[i].first == 0)//그룹의 전체 멤버 이름 출력
		{
			group_name = question[i].second;
			for (auto member : group_member[group_name])
			{
				cout << member << "\n";
			}
		}
		else//1 //멤버가 속한 그룹명 출력
		{
			member_name = question[i].second;
			for (auto groupname : group_member)
			{
				auto member_vector = groupname.second;
				auto find_name = find(member_vector.begin(), member_vector.end(), member_name);
				if (find_name != member_vector.end())//벡터 속에서 찾음
				{
					cout << groupname.first << "\n";
					break;
				}
			}
		}
	}

	return;
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	//메모리제한 주의?
	map <string, vector<string>> group_member;
	vector<pair<int, string>> question;

	input_member(group_member, question);
	find_answer(group_member, question);

	return 0;
}

0개의 댓글