다른 풀이에 비해 시간은 동일하지만 메모리 사용량이 너무 많았다.
모든 입력을 한 번에 다 받아서 정답을 확인하려 한 것과, 키값들과 암호문을 또 새로운 벡터로 받아서 그런거 같다....
쉬운 알고리즘이었는데 너무 복잡하게 생각한거 같다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
void find_answer(vector<vector<vector<string>>>& plaintext)
{
int i, j, k;
vector<string> first_public_key;
vector<string> second_public_key;
vector<string> enc_text;
for (i = 0; i < plaintext.size(); i++)
{
first_public_key = plaintext[i][0];
second_public_key = plaintext[i][1];
enc_text = plaintext[i][2];
/*
for (string temp : first_public_key)
{
cout << temp << " ";
}
cout << "\n";
for (string temp : second_public_key)
{
cout << temp << " ";
}
cout << "\n";
for (string temp : enc_text)
{
cout << temp << " ";
}
cout << "\n";
*/
for (j = 0; j < first_public_key.size(); j++)
{
for (k = 0; k < second_public_key.size(); k++)
{
if (second_public_key[k] == first_public_key[j])
{
cout << enc_text[k] << " ";
break;
}
}
}
cout << "\n";
}
return;
}
void input_data(vector<vector<vector<string>>> &plaintext)
{
int T, N;
int i, j, k;
string temp;
cin >> T;
for (i = 0; i < T; i++)
{
vector<vector<string>> T1;
cin >> N;
for (j = 0; j < 3; j++)
{
vector<string> T2;
for (k = 0; k < N; k++)
{
cin >> temp;
T2.push_back(temp);
}
T1.push_back(T2);
}
plaintext.push_back(T1);
}
/*
cout << "입력값확인\n";
for (i = 0; i < plaintext.size(); i++)
{
for (j = 0; j < plaintext[i].size(); j++)
{
for (k = 0; k < plaintext[i][j].size(); k++)
{
cout << plaintext[i][j][k] << " ";
}
cout << "\n";
}
cout << "\n";
}
*/
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<vector<vector<string>>> plaintext;
input_data(plaintext);
find_answer(plaintext);
return 0;
}