서두르지 말고 쉬지 말자

백준 1620번 나는야 포켓몬 마스터 이다솜(C++) 본문

코딩 공부/Baekjoon Problem Solving

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

philos 2025. 4. 17. 12:34

solved.ac 문제 난이도 : 실버 4

문제 유형: 자료구조, 해시를 이용한 집합과 맵

문제 해결 전략 : 양방향 map을 이용해서 구현했고 시간 단축을 위해 코드를 추가했다. stoi와 isdigit를 이용했다.

문제 해결 소감 : map 자료구조가 뭔지 알고 STL(Standard Templete Library)로 구현해 보았다. 처음 이 자료형을 접했다. 지금은 STL을 사용할 수 있는 걸로 만족하지만, 라이브러리가 Red-Black Tree로 이루어져 있다는데 나중에 이게 뭔지 한번 알아봐야 겠다. stoi와 isdigit를 알았다 이런 편리한 함수는 좀 알아두자.

 

#include <iostream> //포켓몬 마스터 이다솜
#include <map>
#include <string>
int n = 0, m = 0;
std::string str;
std::map<int, std::string> num2name;
std::map<std::string, int> name2num; //양방향으로 탐색가능하게 하기 위해 키 값의 타입 반전시켜서 총 2개 선언언
int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr); //시간 단축용

    std::cin >> n >> m;
    for (int i = 0; i < n; i++)
    {
        std::cin >> str;
        num2name[i + 1] = str;
        name2num[str] = i + 1;
    }
    std::string input = "";
    for (int i = 0; i < m; i++)
    {
        std::cin >> input;
        if (std::isdigit(input[0]))//숫자 문자 섞여 있지 않아서 [0]인덱스만 검사해도 됨, isdigit은 숫자면 참 아니면 거짓인 함수
        { // 숫자다
            std::cout << num2name[std::stoi(input)] << '\n';//stoi는 string to int std::string을 정수타입으로 바꿔줌줌
        }
        else
        { // 문자열이다
            std::cout << name2num[input] << '\n';
        }
    }
    return 0;
}
반응형