
이 문제는 일반적인 문제보다. 어려운 문제다, 그렇다면 한번 풀어봐야 할텐데 문제부터 알아야된다. 문제는 간단하게 말하면, N개의 포켓몬의 이름이 있으며, 그 이후엔 M개의 문제를 내는데, 숫자면, 그 번호에 맞는 포켓몬, 만약 문자열이면, 그 문자열에 맞는 인덱스를 출력하면 되는 문제다. 그렇다면, 한번 알고리즘을 짜기 전, 사용해야되는 함수들을 알아보자, 우선 문제부분에서 입력 받은 문자열이 숫자인걸 확인 하게 해주는 std::isdigit이라는 함수를 사용하면된다. 그러면 밑은 알고리즘이다.
알고리즘
- 문제 부분에서 입력받은 문자열이 숫자인지 아닌지 확인
- 숫자면, 숫자에 맞는 배열에서 문자열 출력
- 문자열이면, 문자열이 같은 배열의 index를 출력
이 알고리즘을 가지고 풀면 쉽게 풀게되게 되는데, 이 문제는 입력받은 자료형을 잘 생각하고 코드를 짜보자.
#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
bool IsNum(string a) {
for (char c : a) {
if (isdigit(c) == 0) return false;
}
return true;
}
int main() {
ios_base::sync_with_stdio();
cin.tie(NULL); cout.tie(NULL);
int n, m;
cin >> n >> m;
map<int, string> findInt;
map<string, int> findString;
for (int i = 0; i < n; i++) {
string a;
cin >> a;
findInt.insert({ i, a });
findString.insert({ a, i });
}
for (int i = 0; i < m; i++) {
string a;
cin >> a;
// 숫자면
if (IsNum(a)) {
// findInt의 밸류
cout << findInt[stoi(a)-1] << "\n";
}
// 문자열이면
else {
// findString의 밸류
cout << findString[a] + 1 << "\n";
}
}
}