❔문제
🔄 문제 및 입출력 조건 파악
- 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';
}
}
🕧 결과
'Problem Solving' 카테고리의 다른 글
알고리즘 :: 백준 :: 1213 - 팰린드롬 만들기 (0) | 2025.01.07 |
---|---|
알고리즘 :: 백준 :: 9375 - 패션왕 신해빈 (0) | 2025.01.07 |
알고리즘 :: 백준 :: 2559 - 수열 (0) | 2025.01.07 |
알고리즘 :: 백준 :: 9996 - 한국이 그리울 땐 서버에 접속하지 (0) | 2025.01.07 |
알고리즘 :: 백준 :: 11655 - ROT13 (0) | 2025.01.07 |