문제
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";
}
}
}