1. 문제 접근
- 해당 문제는
string
형을 key, int
형을 value로 갖는 map과 int
를 key, string
을 value로 갖는 map을 통해 풀어야 함 => O(NlogN)으로 풀 수 있음
- 아니면 숫자를 통해 문자열을 찾는 경우는 배열을 활용해 풀 수 있음
2. 시행착오
- 입력이 엄청 많이 들어오는 경우(약 20만) 시간초과 문제를 겪음
3. 코드 및 풀이
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
3.1 풀이
- 먼저 입력으로 들어오는 N개의 포켓몬에 대한 정보를
string_map
과 int_map
에 넣음
- 그 후 M개의 문제가 들어오고, 각각의 입력이 숫자인지, 문자인지 판별하기 위해
atoi()
함수를 사용해 풀었음
- 입력이 문자이면
string
형을 key로 갖는 string_map
을 통해 값을 출력
- 입력이 숫자이면
int
형을 key로 갖는 int_map
을 통해 갑승ㄹ 찾음
#include <bits/stdc++.h>
using namespace std;
map<int, string> number_map;
map<string, int> string_map;
int n, m;
string tmp;
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 >> tmp;
number_map[i] = tmp;
string_map[tmp] = i;
}
for(int i = 0; i < m; i++) {
cin >> tmp;
int q_int = atoi(tmp.c_str());
if (q_int == 0) cout << string_map[tmp] << '\n';
else cout << number_map[q_int] << '\n';
}
return 0;
}
Reference