
자 이번엔 11655번 ROT13을 풀어봤는데 한번 다시 풀어보자. 우선 ROT13이 뭐하는 것인지는 알아야되는데 ROT13이란? 알파벳을 13번 뒤로 돌려서 암호화 하는 간단한 알고리즘이다, 그렇다면 예외 사항을 알아야 될텐데 한번 예외 사항을 보자.
예외 사항
- 소문자, 대문자 z를 넘기면 안된다.
- 숫자나, 공백같은건 13번을 뒤로 넘기면 안된다.
이 예외사항을 알고 한번 알고리즘을 짜봐야 되는데. 한번 간단하게 짜보도록 하자.
알고리즘
- 우선 getline을 이용해 입력을 받는다
- 입력받은 문자열의 문자 하나하나 13번씩 넘김
- 만약 13번씩 넘겼는데, z를 넘어간다? 그러면 다시 a부터 시작해서 더한다.
이런식으로 해서 한번 알고리즘을 풀어보았는데, 잘만하면 더 빠른 코드가 나올것 같다.
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int main() {
string a;
// 띄어쓰기 포함해서 입력 받기
getline(cin, a);
for (int i = 0; i < a.length(); i++) {
char c = a[i];
// c에 들어간 문자가 공백이면 공백만 출력하고 끝내기
if (c == ' ') {
cout << " ";
continue;
}
// c에 들어간 문자가 숫자라면 그냥 띄우고 끝내기
if (c <= '9') {
cout << c;
continue;
}
// 13개 더하는중
for (int i = 0; i < 13; i++) {
c++;
// 만약 소문자 범위가 벗어난다면 a로 저장후 넘기기
if ((int)c > 'z') {
c = 'a';
continue;
}
// 대문자 범위에 벗어나면 초기화 후 넘기기
if ((int)c < 'a' && (int)c > 'Z') {
c = 'A';
continue;
}
}
cout << c;
}
}