본문 바로가기
코딩테스트 공부 2025 Start/1주차 (구현)

11655) ROT13

by xortl98 2025. 4. 5.
728x90

 출처 

https://www.acmicpc.net/problem/11655

 

 내 풀이 

더보기
더보기
#include<iostream>
#include<string>

using namespace std;

string input;

int main()
{
	getline(cin, input);

	for (int i = 0; i < input.length(); i++)
	{

		if (input[i] >= 'a' && input[i] <= 'z')
		{
			input[i] -= 'a';
			input[i] += 13;
			input[i] %= 26;
			input[i] += 'a';
		}

		else if (input[i] >= 'A' && input[i] <= 'Z')
		{
			input[i] -= 'A';
			input[i] += 13;
			input[i] %= 26;
			input[i] += 'A';
		}

	}

	cout << input;
}

 

 

 해설

ROT13은 알파벳을 13글자씩 밀어 암호화하는 방식으로,

  • 소문자, 대문자를 각각 13글자 밀고
  • 알파벳 범위를 넘어가면 처음으로 돌아오는 순환 구조를 가짐 

띄어쓰기나 숫자, 특수문자는 그대로 출력해야 하므로,

  • getline을 사용하여 띄어쓰기가 포함된 한 줄 전체를 입력 받음.
  • 알파벳은 'a' 또는 'A'를 기준으로 0부터 인덱스를 맞추고,
  • 13을 더한 뒤 26으로 나눠서 범위 조정 후, 다시 'a' 또는 'A'를 더해 원래 문자로 복원함.

 

 느낀점 

 

getline()을 활용하면 띄어쓰기가 포함된 문자열도 쉽게 받을 수 있음