본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 1620번 : 나는야 포켓몬 마스터 이다솜 답

반응형

www.acmicpc.net/problem/1620

 

1620번: 나는야 포켓몬 마스터 이다솜

첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면

www.acmicpc.net

map자료구조와 vector자료구조를 사용해보는 간단한 문제였습니다.

 

풀이방법 

 map자료구조에서 c++의 경우에는 value로부터 key를 추출하는 내장함수가 딱히 없어 vector자료구조를 이용했습니다.

1. 도감의 번호에 해당하는 포켓몬이름을 해당 자료구조에 저장했습니다.

2. 도감의 번호에 해당하는 포켓몬이름이 주어질 경우 map의 value를 출력하도록 했고 반대로 도감의 포켓몬 이름이 주어질 경우엔 포켓몬 번호를 vector자료구조의 값을 찾아 출력하도록 작성했습니다.

 

Code 

#include <iostream>
#include <string>
#include <vector>
#include <map>
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
int main(){
    fastio;
    int n,m;
    map <string,int> encyclopedia;
    vector <string> vec_encyclopedia(100001);
    cin >> n >> m;
    for(int i = 1; i <= n; i++){
        string pokemonName;
        cin >> pokemonName;
        encyclopedia[pokemonName]=i;
        vec_encyclopedia[i] = pokemonName;
    }
    while(m--){
        string x;
        cin >> x;
        if('1'<=x[0] && x[0] <= '9') //숫자일 경우
            cout << vec_encyclopedia[stoi(x)]<<'\n';
        else // 포켓몬 이름일 경우
            cout << encyclopedia[x]<<'\n';
    }
}