본문 바로가기
코테

백준 11655번 - ROT13

by arirang_ 2023. 8. 19.
#include <bits/stdc++.h>
using namespace std;
string s;
char ret[103];
int main(){
	getline(cin, s);
		
	for(int i=0; i<s.size(); i++){
				
		if(s[i]-'A'>=0 && s[i]-'A'<26){
			if('Z'-s[i] <13){
				int part = 13 - ('Z'-s[i]);
				ret[i] = 'A' + (part-1);
			}else{
				ret[i] = s[i] + 13;
			}			
		}else if(s[i]-'a'>=0 && s[i]-'a'<26){
			if('z'-s[i] <13){
				int part = 13 - ('z'-s[i]);
				ret[i] = 'a'+ (part-1);
			}else{
				ret[i] = s[i]+13;
			}		
		}else{
			ret[i] = s[i];
		}
		cout << ret[i];
	}
	
	return 0;
}

알파벳을 z(알파벳이 소문자인 경우) 혹은 Z(알파벳이 대문자인 경우)에서 뺐을 때 13보다 작으면 13에서부터 차이를 구하고 a 혹은 A에서부터 남은 차이만큼 더해준다.

 

cf) 만약 z 혹은 Z를 넘어갔을 때 전체 알파벳 숫자 26을 한번 더 빼줘도 된다.

O -> B

79 + 13 = 92 

Z인 90을 넘어가므로 26을 빼주면 2가 된다.

그럼 B가 된다.