Y를 13글자씩 민다고 생각해보자. Z를 넘어서면 다시 A로 돌아가야 한다. 여기서 % 연산을 생각해볼 수 있다.
그렇다면 먼저 대문자의 경우 A(65) ~ Z(90)까지의 숫자를 먼저 0~25까지의 범위로 만들어준다. 그리고 13을 더해주는데 Y의 경우 24+13=37이 된다. 여기서 다시 'A'(65)를 더해주게 되면 102가 된다. 102는 소문자 f이므로 그냥 더해서는 안되고, % 26을 해준 후 65를 더해줘야 한다. 이렇게 하면 나머지 연산에 의해 다시 0으로 되돌아가게 될 것이고 0~25 내에서만 더해지도록 할 수 있다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
string str;
getline(cin, str);
for (int i = 0; i < str.length(); i++)
if (str[i] >= 'A' && str[i] <= 'Z')
cout << char((str[i] - 'A' + 13) % 26 + 'A');
else if (str[i] >= 'a' && str[i] <= 'z')
cout << char((str[i] - 'a' + 13) % 26 + 'a');
else
cout << str[i];
return 0;
}