Algorithm
[백준 1620] 나는야 포켓몬 마스터 이다솜
Mirab
2024. 8. 16. 22:32
https://www.acmicpc.net/problem/1620
지문이 엄청 길지만, 핵심은 마지막에 있다.
포켓몬 이름을 대면 그에 대응되는 숫자를
숫자를 대면 그에 대응되는 이름을 리턴해주면 된다.
그런데 경우의 수가 생각보다 크다.
포켓몬 개수는 1 ~ 10만
내가 맞춰야 하는 개수(쿼리의 수)도 1 ~ 10만
문자열을 숫자로 바꾸는 것
숫자를 문자열로 바꾸는 것
그런데 생각해 보면 둘 다 문자열로 저장해도 상관없다.
그래서 저장할 때에는 둘 다 문자열로 저장한다.
쿼리의 수가 최대 10만이니, 어떤 포켓몬 이름이나 숫자를 물어보더라도 빠르게 찾아서 리턴해줘야 하므로
unordered_map(정렬되지 않은 맵 = 해시맵)을 사용해서 find를 O(1)에 찾을 수 있도록 한다.
그런데, ios_base::sync_with_stdio(false)를 통해서 scanf, cin의 동기화를 꺼줘야 아슬아슬하게 시간 초과를 면할 수 있다.
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int n, m;
string s;
unordered_map<string, string> mp;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> s;
mp[s] = to_string(i);
mp[to_string(i)] = s;
}
for (int i = 1; i <= m; i++)
{
cin >> s;
cout << mp[s] << '\n';
}
return 0;
}