알고리즘/백준

백준_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;
}