하루하루 꾸준히, 인생은 되는대로

자료구조

백준 걸그룹 마스터 준석이 C++

긤효중 2022. 3. 12. 23:33

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일 경우 해당 멤버가 속한 팀의 이름을 출력한다.


해결방안 -> 걸그룹의 수를 입력받고 각 걸그룹마다 팀의 이름을 입력받고 , 걸그룹의 인원수 만큼 루프를 돌면서 해당 걸그룹의 이름을 key값으로 value를 그룹명으로 지정한다.

ex)

blackpink
4
jisu
lisa
rose
jenny

이 경우 4만큼 루프를 돌면서 jisu,lisa,rose,jenny를 키 값으로, value값을 블랙핑크로 지정하면 된다.

 

그 후 M개의 퀴즈를 입력받는데 퀴즈의 종류가 1일경우 key의 대응하는 value값을 그냥 출력하면 되고, 

퀴즈의 종류가 0일경우 iter를 끝까지 돌리면서 iter->second와 같은 key값(iter->first)를 출력하면 된다.


전체 소스코드->

#include <iostream>
#include <map>
#include <string>
 
using namespace std;
 
int main(void){
    map<string,string> m;
 
   int n;
   int k;
 
    cin >> n >> k;
    for(int i = 0;i<n;i++){
        string group;
        cin >> group;
        int group_num;
        cin >> group_num;
        for(int j = 0;j<group_num;j++){
            string member;
            cin >> member;  
            m[member] = group;
        }
 
    }
 
   for(int i = 0;i<k;i++){
        map<string,string>::iterator iter;
 
       string q;
       cin >> q;
       int Q;
       cin >> Q;
       if(Q == 1){
           iter = m.find(q);
           if(iter != m.end()){
               cout << iter->second << '\n';
           }
       }
       else if(Q == 0){
 
           for(iter = m.begin();iter != m.end();iter++){
               if(iter->second == q){
                   cout << iter->first << '\n';
               }
           }
       }
   }
 
 
 
 
}

'자료구조' 카테고리의 다른 글

백준 1755 C++  (0) 2022.03.19
백준 전화번호 목록 C++  (0) 2022.03.17
백준 숫자 카드 2 C++  (0) 2022.03.09
C++ Map사용법 [STL] + 백준 듣보잡  (0) 2022.03.08
백준 5430 AC C++  (0) 2022.03.03