본문 바로가기

온라인 코딩/탐색(Search)

[백준] 1620번 나는야 포켓몬 마스터 이다솜

 

 

문제

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<iostream>
#include<map>
#include<string>
#include<vector>
#include<sstream>
 
int main() {
    //M: 문제의 개수
    //N: 포켓몬의 개수
    int M{}, N{};
    std::cin >> N >> M;
 
    std::map<std::string,std::string> PokemonIndex;
    //출력용 Vector
    std::vector <std::string> printVector;
 
    /*
    Insert Data
    */
    for (int i = 0; i < N; ++i) {
        std::stringstream index{};
        std::string name{};
        std::cin >> name;
        index << (i+1);
 
       PokemonIndex.emplace(name, index.str());
       PokemonIndex.emplace(index.str(), name);
    }
 
    std::string answer{};
    for (int i = 0; i < M; ++i) {
        std::cin >> answer;
       printVector.emplace_back(PokemonIndex.find(answer)->second);
    }
 
    for (const auto& i : printVector) {
        std::cout << i << "\n";
    }
 
}
 

 

 

후기

이 문제를 해결하기 위한 키워드는 이진트리(map)이다.

 

C++에서 제공하는 map 컨테이너는 이진트리 기반의 컨테이너이다. 이진트리를 직접 구현해서 진행해도 되지만 나는 map 컨테이너를 사용하였다. 이 문제는 숫자를 입력했을 때에는 문자를 문자를 입력했을 때 에는 숫자가 나와야 한다.

그래서 숫자와 문자열 모두를 Key값으로 집어넣고 찾을 때 해당하는 답을 출력용 vector에 저장하여 출력하였다.

 

 

 

출처 및 레퍼런스

문제 링크: https://www.acmicpc.net/problem/1620

 

관련 글

[자료구조 알고리즘/그래프(Graph)와 트리(Tree)] - 이진 검색트리(Binary Search Tree)

[온라인 코딩/탐색(Search)] - [백준] 1991번 트리 순회

[온라인 코딩/탐색(Search)] - [구름IDE] PostOrder Traversal (★4)