모름

문제

1. 포켓몬 개수 N (1~100000)

2. 맞춰야 하는 문제 개수 M (1 ~ 100000)

3. 포켓몬 이름은 영어

4. 문제는 알파벳일떄는 번호로 출력, 번호일 때는 알파벳으로 출력

 

위와 같은 문제인데, 포켓몬 이름과 번호를 짝 지어야 하기 때문에 map 자료구조를 쓴다. 단, 입력이 번호로도 들어올 수 있기 때문에 string:int 뿐 아니라 int:string 으로도 값을 저장해야한다. 그리고 나서 문제를 풀이하면된다.

 

함정

cin, cout을 그냥 사용시 시간 초과가 뜬다. 문제 중 알파벳의 크기를 알려주는 것에는 printf, scanf를 사용하라는 뜻이 있는게 아닐까 싶다.

 

풀이

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    int N, M;
    cin >> N >> M;

    map<string, int> m;
    map<int, string> m2;

    string name;
    for(int i = 1; i <= N; i++)
    {
        cin >> name;
        m[name] = i;
        m2[i] = name;
    }

    string prb;
    for(int i = 1; i<= M; i++)
    {
        cin >> prb;
        if(prb[0] >= '0' && prb[0] <= '9'){
            cout << m2[stoi(prb)] << "\n";
        }
        else{
            cout << m[prb] << "\n";
        }
    }
}