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;
}
'Algorithm' 카테고리의 다른 글
[백준 2559] 수열 (0) | 2024.08.16 |
---|---|
[백준 9375] 패션왕 신해빈 (0) | 2024.08.16 |
[백준 9996] 한국이 그리울 땐 서버에 접속하지 (0) | 2024.08.16 |
[백준 11655] ROT 13 (0) | 2024.08.15 |
[백준 11051] 이항 계수 2 (0) | 2022.01.11 |