[백준/C++] 11655 : ROT13 (브론즈 I)

Eunho Bae·2023년 1월 16일
0

백준

목록 보기
36/40

문제링크


아이디어

Y를 13글자씩 민다고 생각해보자. Z를 넘어서면 다시 A로 돌아가야 한다. 여기서 % 연산을 생각해볼 수 있다.
그렇다면 먼저 대문자의 경우 A(65) ~ Z(90)까지의 숫자를 먼저 0~25까지의 범위로 만들어준다. 그리고 13을 더해주는데 Y의 경우 24+13=37이 된다. 여기서 다시 'A'(65)를 더해주게 되면 102가 된다. 102는 소문자 f이므로 그냥 더해서는 안되고, % 26을 해준 후 65를 더해줘야 한다. 이렇게 하면 나머지 연산에 의해 다시 0으로 되돌아가게 될 것이고 0~25 내에서만 더해지도록 할 수 있다.


제출코드

#include <iostream>
#include <string>

using namespace std;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	string str;
	getline(cin, str);
	for (int i = 0; i < str.length(); i++)
		if (str[i] >= 'A' && str[i] <= 'Z')
			cout << char((str[i] - 'A' + 13) % 26 + 'A');
		else if (str[i] >= 'a' && str[i] <= 'z')
			cout << char((str[i] - 'a' + 13) % 26 + 'a');
		else 
			cout << str[i];
	return 0;
}
profile
개인 공부 정리

0개의 댓글