본문 바로가기
카테고리 없음

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

by 꼬부기가우는소리 2023. 6. 18.
728x90

 

- 관련 사이트: https://www.acmicpc.net/problem/1620

 

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

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

www.acmicpc.net

 

저장된 포켓몬 도감 목록에서 이름을 검색하면 포켓몬 번호로, 번호로 검색하면 포켓몬 이름으로 출력해주는 문제이다.

"맵을 사용하여 이름과 수를 연결짓는 문제" 로 힌트가 주어져 있다.

 

단순 map 만으로 입력을 받아 검색을 수행할 시, 시간 초과 문제가 발생되어 vector와 map 둘 다 사용하여 문제를 풀어주었다.

 

1) map에 (key: 이름, value: 번호) 형식으로 저장, vector에 index == 번호 로 하여 이름 저장

2-1) 입력받은 문자가 숫자일 경우, vector에서 포켓몬 이름 출력

2-2) 입력받은 문자가 숫자가 아닐 경우, map에서 포켓몬 번호 출력

 

#include <iostream>
#include <vector>
#include <map>
using namespace std;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int N, M;
    cin >> N >> M;
    
    vector<string> pocketmon_name(N + 1, "");
    map<string, int> pocketmon;
    string name;
    for (int i = 1; i <= N; i++)
    {
        cin >> name;
        pocketmon.insert(pair<string, int>(name, i));
        pocketmon_name[i] = name;
    }
    
    string quest;
    string result = "";
    for (int i = 0; i < M; i++)
    {
        cin >> quest;
        if (isdigit(quest[0]))
            result += (pocketmon_name[stoi(quest)] + "\n");
        else
            result += (to_string(pocketmon.find(quest)->second) + "\n");
    }
    cout << result;
    return 0;
}

- 메모리: 23792 KB

- 시간: 160 ms

- 코드 길이: 767 B

 

댓글