알고리즘/백준
백준_1620 : 나는야 포켓몬 마스터 이다솜 - C++
맏리믓
2023. 5. 27. 05:27
문제

문제 해석
- 문자열(포켓몬 이름) 을 입력 받는다.
- 그 후 이름이 나오면 그 포켓몬이 몇번째 입력 받은 것인지
- 숫자가 나오면 그 번째 에 어떤 포켓몬이 입력 받았었는지 출력 하면 되는 문제이다.
알고리즘
- 포켓몬 이름을 입력 받을 때 숫자로 탐색 하기 위한 vector 와 이름으로 탐색 하기 위한 map 을 따로 만들어 동시에 받아 준다.
- 이 후 문제를 입력 받는데 숫자로 입력 되었다면 첫글자가 숫자 일 테니까 문자열로 입력 받은 후 첫 글자의 아스키 코드가 48 ~ 57 사이면 된다.
- 만약 숫자라면 입력 받은 문자열을 숫자로 변경 해 주고 vector 를 통해 이름을 검색 한다.
- 숫자가 아니라면 해당 문자를 map 을 통해 검색 하면 된다.
- 이때 찾을 때 마다 cout 으로 출력 하면 시같 초과가 뜨니 vector 에 정답 데이터를 넣어 두고 한번에 출력 하는 것을 추천 한다.
코드
#include <iostream>
#include <map>
#include <vector>
#include <string>
using namespace std;
int N, M;
map <string, int> mapset;
vector<string> name;
vector<string> ans;
string tmp;
int main(){
cin >> N >> M;
for(int i = 1; i <= N; i++){
cin >> tmp;
name.push_back(tmp);
mapset.insert({tmp, i});
}
for(int i = 0; i < M; i++){
cin >> tmp;
if(48 <= tmp[0] && tmp[0] <= 57){
ans.push_back(name[stoi(tmp)-1]);
} else {
ans.push_back(to_string(mapset[tmp]));
}
}
for(int i = 0; i < ans.size(); i++){
cout << ans[i] << '\n';
}
return 0;
}