# 본인 코드
#include <bits/stdc++.h>
using namespace std;
int n, m;
string name[100000];
map<string, int> mp;
vector<string> ret;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// 조건 0. 포켓몬 각 입력은 숫자 1부터 차례로 매핑된다.
// 조건 1. 이름은 첫글자가 대문자이고 나머지는 소문자이다.
// 조건 2. 마지막글자가 대문자일 수도 있다.
// 조건 3. 포켓몬 글자 최대길이는 20자, 최소 2자이다
cin >> n >> m;
for (int i = 0; i < n; i++){
cin >> name[i];
mp[name[i]] = i;
}
for (int i = 0; i < m; i++){
string input;
cin >> input;
// 포켓몬 이름이 입력됐을때
if(input[0] >= 65 && input[0] <= 90){
string s = to_string(mp[input] + 1);
ret.push_back(s);
} else {
// 숫자가 입력되었을때 -> 숫자로 파싱해야됨
if(atoi(input.c_str()) != 0){
ret.push_back(name[atoi(input.c_str()) - 1]);
}
}
}
for(string elem: ret){
cout << elem << "\n";
}
return 0;
}
- Map 자료구조와 배열을 사용했다.
- 배열은 숫자 입력시 포켓몬 이름을 출력하기 위한 용도이고, Map은 포켓몬 이름입력시 포켓몬 번호 출력을 위한 용도이다.
atoi
를 통해 string -> int 변환을 하여 배열 인덱싱을 했고,to_string
메서드를 통해 포켓몬 번호를 문자열로 변환하였다. (string타입 벡터에 push_back 하기위해)
# 개선 코드
#include <bits/stdc++.h>
using namespace std;
int n, m;
string s;
map<string, int> mp;
// map<int, string> mp2;
string a[100004];
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m;
for (int i = 0; i < n; i++)
{
cin >> s;
mp[s] = i + 1;
// mp2[i+1] = s;
a[i + 1] = s;
}
for (int i = 0; i < m; i++){
cin >> s;
if(atoi(s.c_str()) == 0){
cout << mp[s] << "\n";
}else{
cout << a[atoi(s.c_str())] << "\n";
}
}
return 0;
}
- Map 자료구조 두개를 사용해도 되고, 배열과 맵 두개를 혼용해서 사용해도 된다.