본문 바로가기
알고리즘/백준

알고리즘(C++) / 백준 11655 : ROT13

by clean_h 2021. 4. 27.
728x90

11655

boj.kr/11655

 

11655번: ROT13

첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다. S의 길이는 100을 넘지 않는다.

www.acmicpc.net

 

문제

ROT13은 카이사르 암호의 일종으로 영어 알파벳을 13글자씩 밀어서 만든다.

예를 들어, "Baekjoon Online Judge"를 ROT13으로 암호화하면 "Onrxwbba Bayvar Whqtr"가 된다. ROT13으로 암호화한 내용을 원래 내용으로 바꾸려면 암호화한 문자열을 다시 ROT13하면 된다. 앞에서 암호화한 문자열 "Onrxwbba Bayvar Whqtr"에 다시 ROT13을 적용하면 "Baekjoon Online Judge"가 된다.

ROT13은 알파벳 대문자와 소문자에만 적용할 수 있다. 알파벳이 아닌 글자는 원래 글자 그대로 남아 있어야 한다. 예를 들어, "One is 1"을 ROT13으로 암호화하면 "Bar vf 1"이 된다.

문자열이 주어졌을 때, "ROT13"으로 암호화한 다음 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다. S의 길이는 100을 넘지 않는다.

 

출력

첫째 줄에 S를 ROT13으로 암호화한 내용을 출력한다.

 

코드

//11655 ROT13
#include <iostream>
#include <string>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	string s;
	getline(cin, s);

	for (int i = 0; i < s.size(); i++) {
		if (s[i] >= 'a' && s[i] <= 'z') {
			if ((int)s[i] - 110 < 0)
				cout << char((int)s[i] + 13);
			else {
				cout << char((int)s[i] - 13);
			}
		}
		else if (s[i] >= 'A' && s[i] <= 'Z') {
			if ((int)s[i] - 78 < 0)
				cout << char((int)s[i] + 13);
			else {
				cout << char((int)s[i] - 13);
			}
		}
		else
			cout << s[i];
	}

	return 0;
}

 

설명

아스키 코드를 이용하여 ROT13으로 암호화한 내용을 출력한다.

ROT13암호는 다음과 같다. 

A부터 Z까지의 알파벳은 총 26개이다. A부터M까지 13개의 알파벳은 아스키코드의 +13이 되고,  N부터 Z까지 13개의 알파벳은 아스키코드의 -13이 된다. 알파벳 소문자도 마찬가지이다. 

따라서 다음과 같이 구현이 가능하다. 

 

결과

 

고찰

이번 문제는 쉽게 구현이 가능하다. 

출력할 때 char형으로 변환하여 출력한다.

 

난이도

◐○

 

 

728x90

댓글