문제
문제링크
해설
- 문자열을 입력받았을 때 정수를 반환하기 위해 key-value 구조로 데이터를 저장하는 map STL 컨테이너를 떠올리면 성공입니다.
- 하지만, 정수(value)를 입력받았을 때 문자열(key)을 반환하는 방법이 없습니다.
- 따라서, 공간복잡도 O(n)을 더 소모하지만 key-value를 반대로 저장하는 또다른 map 컨테이너를 생성합니다.
- key가 문자열인 map을 map_A, key가 정수인 map을 map_b라고 하면,
- 질문이 문자열일 때 map_A[질문]을 반환합니다.
- 질문이 정수일 때 map_B[질문]을 반환합니다.
- 이때, 저장되는 순서는 중요하지 않기 때문에 unordered_map(해시)를 사용하는 것이 성능면에서 조금 더 좋습니다.
코드
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int n, k;
cin >> n >> k;
unordered_map<string, int> dict_str_to_int;
unordered_map<int, string> dict_int_to_str;
for (int i = 1; i <= n; i++) {
string name;
cin >> name;
dict_str_to_int.emplace(name, i);
dict_int_to_str.emplace(i, name);
}
while (k--) {
string question;
cin >> question;
if ('0' <= question[0] && question[0] <= '9')
cout << dict_int_to_str[stoi(question)] << '\n';
else
cout << dict_str_to_int[question] << '\n';
}
return 0;
}
소스코드 링크
결과