문제
문제링크
해설
- ROT13은 대문자/소문자 영문자를 13글자 앞 또는 뒤로 밀어서 만든 만든 새로운 문자열을 의미합니다.
- 13번째 알파벳인 'M'을 기준으로 13을 더하면 'Z'이므로, 14번째 알파벳인 'N'은 13을 더하면 안 되고 'A'로 돌아가야 합니다.
- 그러므로, 14번째 알파벳부터는 13을 뺍니다.
- 덧셈 밑 나머지연산(%)을 사용하는 것보다 이 방법이 훨씬 간단합니다.
- 문장을 입력받아야 하므로, cin을 사용해서는 안 되며, getline() 함수를 사용합시다.
코드
#include <iostream>
#include <cctype>
using namespace std;
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
string input;
getline(cin, input);
for (char& ch : input) {
if (isupper(ch)) (ch > 'M') ? ch -= 13 : ch += 13;
else if (islower(ch)) (ch > 'm') ? ch -= 13 : ch += 13;
}
cout << input << '\n';
return 0;
};
코드링크
결과