코딩테스트 공부 2025 Start/1주차 (구현)
11655) ROT13
xortl98
2025. 4. 5. 14:06
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()을 활용하면 띄어쓰기가 포함된 문자열도 쉽게 받을 수 있음