Problem Solving

알고리즘 :: 백준 :: 1620 - 나는야 포켓몬 마스터 이다솜

soreDemo 2025. 1. 7. 11:23

문제

🔗문제링크

 

🔄 문제 및 입출력 조건 파악

  • 1 ≤ 포켓몬의 개수 N, 문제의 개수 M ≤ 100,000
  • 포켓몬 이름 길이 ≤ 20
  • 문자열이 입력됐다면? 해당하는 번호 출력
  • 자연수가 입력됐다면? 해당하는 문자열 출력

✏️ 문제풀이

STL 자료구조를 활용할 수 있는지 묻는 기본적인 문제입니다.

  • `std::string`을 key값으로 하는 `std::map<std::string, int>`를 만들어 `std::string`이 입력됐을 때는 대응하는 `int`를 출력합니다.
  • `int`를 key값으로 하는 `std::map<int, std::string>`을 만들어 `int`가 입력됐을 때는 대응하는 `std::string`을 출력합니다.

포켓몬을 입력 받을 때, 이름이 들어올지 번호가 들어올지 모르므로 우선 문자열로 입력 받습니다.
만일 입력받은 문자열이 숫자라면, `stoi()` 함수를 이용해서 문자열을 정수로 변경하면 됩니다.

 

[Tip] 굳이 포켓몬이 정렬될 필요가 없기 때문에 해시 기반인 `std::unordered_map<>`을 사용하는 것이 성능상 좀 더 낫습니다.

📝 코드

#include <bits/stdc++.h>
using namespace std;

int N, M;
unordered_map<string, int> dict_name;
unordered_map<int, string> dict_num;

int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
	cin >> N >> M;
	dict_name.reserve(N);
	dict_num.reserve(N);
	for (int i = 1; i <= N; ++i) {
		string name;
		cin >> name;
		dict_name[name] = i;
		dict_num[i] = name;
	}
	while (M--) {
		string q;
		cin >> q;
		if (isalpha(q[0])) cout << dict_name[q] << '\n';
		else cout << dict_num[stoi(q)] << '\n';
	}
}

 

🔗 코드 링크

🕧 결과