[C++] 백준 16165 걸그룹 마스터 준석이
2021. 4. 17.
반응형

www.acmicpc.net/problem/16165

 

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

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

www.acmicpc.net

 

1. 서론

 

복잡한 듯 복잡하지 않은 문제다.

 

2. 문제 풀이

 

퀴즈 프로그램을 만든다. 걸그룹의 수와 그룹 이름, 멤버 이름을 입력받고 저장한다. 그리고 그룹 멤버 이름과 숫자를 입력한다. 

입력한 숫자가 1이면 멤버가 속한 그룹 이름을 출력하고 0이면 그룹의 멤버들을 사전순으로 출력한다.

 

그룹의 이름과 멤버들의 이름을 어떻게 저장할까 어렵게 생각했는데 2차원 배열로 저장했다. 

배열에 멤버들의 이름을 차례로 저장한다. 그런데 사전순으로 정렬해야 하기 때문에 정렬로 멤버들의 이름을 정렬한 후에

배열의 맨 뒤에 그룹의 이름을 넣어준다. (처음에 넣으면 같이 정렬되기 때문에)

그 후 멤버의 이름이 입력되면 2차원 배열을 다 돌면서 찾아준 후 0일 때 멤버들의 이름을 출력하고 1일 때 그룹의 이름을 출력한다.

 

3. 코드 설명

 

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
   int n, m, i, j, x, k;
   vector<vector<string>> v;
   string s, t;

   cin >> n >> m;

   for (i = 0; i < n; i++)
   {
       cin >> t >> x;
       vector<string> g;
       for (j = 0; j < x; j++)
       {
           cin >> s;
           g.push_back(s);
       }  
       sort(g.begin(), g.end());
       g.push_back(t);
       v.push_back(g);
   }

   for (i = 0; i < m; i++)
   {
        cin >> s >> x;

        for (j = 0; j < n; j++)
        {
            for (k = 0; k < v[j].size(); k++)
            {
                if (v[j][k] == s)
                {
                    if (x == 0)
                        for (k = 0; k < v[j].size() - 1; k++)
                            cout << v[j][k] << endl; 
                    else
                        cout << v[j][v[j].size() - 1] << endl;

                }
            }
        }
   }

}

 

값들을 입력 받는다. 2차원 배열에 각 그룹의 멤버들을 넣어준다. 정렬 후에 마지막 항에 그룹의 이름을 넣어준다.

위의 단계를 n번 반복하고 난 후 문제를 입력받는다.

2차원 배열들을 돌면서 문제인 s값을 찾아준다. s값을 찾으면 같이 입력된 숫자가 0인지 1인지 확인한 후 각 조건에 맞는 값을 출력해준다.

 

 

 

반응형
myoskin