컴굥일지

[BOJ/백준 16165][C++] 걸그룹 마스터 준석이 본문

알고리즘/코테 문제

[BOJ/백준 16165][C++] 걸그룹 마스터 준석이

gyong 2023. 8. 13. 02:33
반응형

문제

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

 

문제 내용

걸그룹 팀 이름과 걸그룹 멤버들을 입력받는다. (한 개의 팀이 아닌 여러 개의 팀이다. 입력 형식에 맞게 처리할 것)

이후 팀 이름이 입력되면 멤버들을 출력하고, 멤버 이름이 입력되면 팀 이름을 출력하면 된다.

 

문제 풀이

unordered_map을 사용했다.

(팀, 멤버 벡터) 형식으로 저장하기 위한 team_member와, (멤버, 팀) 형식으로 정하기 위한 member_team을 선언하여 사용한다.

팀에는 멤버가 여러 명이기 때문에 벡터 형식으로 지정했다. 

또한, 팀을 입력했을 때는 멤버를 사전순으로 출력해야 하기 때문에 sort로 정렬을 진행했다.

 

코드

#include <algorithm>
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n, m;
    cin >> n >> m;

    unordered_map<string, vector<string>> team_member; // 팀, 멤버 벡터
    unordered_map<string, string> member_team;         // 멤버, 팀

    string team, member;
    int member_num;
    while (n--) {
        cin >> team >> member_num;
        vector<string> member_list; // 해당 팀에 속하는 멤버 벡터
        while (member_num--) {
            cin >> member;
            member_list.push_back(member);
            member_team[member] = team;
        }
        sort(member_list.begin(), member_list.end()); // 멤버는 사전순으로 정렬
        team_member[team] = member_list;
    }

    int question_type;
    string question;
    while (m--) {
        cin >> question >> question_type;
        if (question_type == 0) { // 팀을 입력 받아 멤버들을 출력
            for (auto member : team_member[question]) {
                cout << member << "\n";
            }
        } else { // 멤버를 입력 받아 팀을 출력
            cout << member_team[question] << "\n";
        }
    }
}

반응형
Comments