해당 문제는 원래 알파벳과 바뀌는 알파벳을 비교하여 하나씩 찾으면 되는 문제이다.
다만 비교할 알파벳들을 어떻게 넣는가?가 중요하다.
구조체, 클래스등 다양한 것을 사용할 수 있을 것 같지만, 가장 좋은 것은 map, 그 중에서도 unordered map인 것 같다.
- map보다 더 빠른 탐색을 하기 위한 자료구조.
- unordered_map은 중복된 데이터를 허용하지 않고 map에 비해 데이터가 많을 시 월등히 좋은 성능.
- 하지만, key가 유사한 데이터가 많을 시 해시 충돌로 인해 성능이 떨어질 수 있음.
- unordered map (key, value) 형태.
해당 자료구조를 사용하면 쉽게 문제를 풀 수 있을 것이다.
#include <bits/stdc++.h>
using namespace std;
int main() {
string encrypted, key;
getline(cin, encrypted);
cin >> key;
// 암호화 규칙 저장 (unordered_map 사용)
unordered_map<char, char> decryptionMap;
for (int i = 0; i < 26; i++) {
decryptionMap[key[i]] = 'a' + i;
}
string decrypted = "";
for (char c : encrypted) {
if (c == ' ') { // 공백 문자는 그대로 추가
decrypted += c;
} else {
decrypted += decryptionMap[c]; // 복호화된 문자 추가
}
}
cout << decrypted << endl;
return 0;
}