11655 - ROT13

재찬·2023년 1월 3일
0

Algorithm

목록 보기
8/64

문제

코드

#include <bits/stdc++.h>
using namespace std;

int main(){
	string s;
	
	getline(cin, s);
	
	for(int i = 0; i < s.size(); i++){
		
		if(s[i] >= 65 && s[i] <= 90){
			
			if(s[i] + 13 > 90){
				s[i] = s[i] + 13 - 'Z' + 'A' - 1;
			}
			else{
				s[i] = s[i] + 13;
			}
			
		}
		
		else if(s[i] >= 97 && s[i] <= 122){

			if(s[i] + 13 > 122){
				s[i] = s[i] + 13 - 'z' + 'a' - 1; 
			}
			
			else {
				s[i] = s[i] + 13;
			}
		
		}
	}
	cout << s;
}

풀이

암호화 방식이 영어만 13칸씩 미는 것이다. 대문자와 소문자 사이의 거리가 있으니 2가지 케이스로 분류하여 대문자인 경우 중에서도 13칸을 밀었을 때 'Z'나 'z' 즉 문자의 끝을 안넘길 경우와 넘길 경우를 분류한다.
대문자는 65 부터 90이고 13을 더한 값이 90을 넘긴다면 Z를 빼주고 넘긴만큼 A에 더해서 한 바퀴 돌아 밀린 것을 표현한다.
소문자도 이와 비슷하게 처리해주면 된다.

결과

후기

문제에 해결 방법에 대한 설명이 자세하게 나와 있어 어렵지 않았다.
하지만 인덱스, 포함 관계 등의 이슈로 꼼꼼하게 봐야하긴 했다.
브론즈 1까지 줘야하나 싶은 간단한 구현 문제였다.

0개의 댓글