알파벳 또한 숫자로 계산이 가능하다.
암호문이 평문과 키를 더해서 만들어졌다면 역으로 키는 암호문을 평문으로 뺀 값으로 구할 수 있는 것이다.
#include <iostream>
using namespace std;
string plain, password, answer;
int main()
{
ios::sync_with_stdio(0), cin.tie(0);
cin >> plain >> password;
int size = plain.size();
answer.reserve(size);
for (int i = 0; i < size; ++i)
{
int ch = ((password[i] - plain[i] + 26) % 26);
if (ch == 0)
{
answer.push_back('Z');
}
else
{
answer.push_back(ch + 64);
}
}
for (int i = 1; i <= size / 2; ++i)
{
if (size % i)
{
continue;
}
string repeatStr = answer.substr(0, i);
string temp = "";
while (temp.size() != size)
{
temp += repeatStr;
}
if (temp == answer)
{
cout << repeatStr;
return 0;
}
}
cout << answer;
return 0;
}
0인 경우에는 Z라는 점
키로 적합한 값이 맞는지 확인해야 하는 점 (ABCABCD와 같은 키의 경우 첫 ABC와 두 번째 ABC만 확인하고 키를 ABC라고 생각하면 문제가 발생한다)
위 2가지를 조심하는 게 좋다.