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

#문제

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

#풀이

#include <iostream>
#include <string>
#include <unordered_map>

using namespace std;

string book[100001];
unordered_map<string, int> bookIdx;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n, m;
	cin >> n >> m;

	for (int i = 1; i <= n; ++i)
	{
		string name;
		cin >> name;

		book[i] = name;
		bookIdx[name] = i;
	}

	while (m--)
	{
		string s;
		cin >> s;

		if (isdigit(s[0]))
		{
			int num = stoi(s);

			cout << book[num] << '\n';
		}
		else
		{
			cout << bookIdx[s] << '\n';
		}
	}

	return 0;
}

#정리

N개의 포켓몬을 순서대로 입력 받는다. 1-N까지가 입력받는 포켓몬의 번호다. 그리고 N+1 부터 5줄을 입력받는데, 숫자면 그 숫자에 맞는 포켓몬 이름을 출력하고, 이름이라면 해당 포켓몬의 번호를 출력하는 문제. 입력 받고, 각 번호에 맞는 포켓몬을 출력하는 것까지는 쉽다. 번호도 반복문을 사용하여 맞는 이름을 찾아 출력하면 되니까 큰 문제가 되지 않을 것이라 생각했다. 하지만 반복문을 사용할 경우 시간초과에 걸려 실패한다. 그래서 생각한 것이 해쉬맵이다. 포켓몬의 이름은 일반 배열에 받고, 인덱스는 해쉬맵에 받아 입력받은 명령이 숫자인지 아닌지 구분하여 출력하면 해결.




    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • [백준] 1764번 듣보잡 / C++
  • [백준] 10816번 숫자 카드 2 / C++
  • [백준] 10866번 덱 / C++
  • [백준] 18258번 큐 2 / C++
  • [백준] 10825번 국영수 / C++