© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 11655 - ROT13

2024-10-18
BOJ
브론즈 I
cpp
원본 문제 보기
구현
문자열

문제

BOJ 11655 - ROT13

문자열이 주어질 때, 알파벳을 13자리씩 밀어서 암호화하는 ROT13을 적용한 결과를 출력하라.

입력

문자열이 한 줄로 주어진다 (공백 포함).

출력

ROT13을 적용한 결과를 출력한다.

예제

입력출력
Baekjoon Online JudgeOnrxwbba Bayvar Whqtr

풀이

각 문자에 13을 더하고 알파벳 범위를 초과하면 26을 빼서 순환시킨다.

  1. getline으로 공백 포함 문자열을 입력받는다
  2. 소문자이면 13을 더한 뒤 'z'를 초과하면 26을 뺀다
  3. 대문자이면 13을 더한 뒤 'Z'를 초과하면 26을 뺀다
  4. 알파벳이 아닌 문자는 그대로 출력한다

핵심 아이디어: ROT13은 알파벳 26자의 절반(13)만큼 밀기 때문에 두 번 적용하면 원문으로 복원된다.

코드

#include <iostream>
#include <string>
using namespace std;
 
int main()
{
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
 
  string arr;
  getline(cin, arr);
  for (int i = 0; i < arr.length(); i++)
  {
    if (arr[i] >= 'a' && arr[i] <= 'z')
    {
      arr[i] += 13;
      if (arr[i] > 'z' || arr[i] < 'a')
      {
        arr[i] -= 26;
      }
    }
    else if (arr[i] >= 'A' && arr[i] <= 'Z')
    {
      arr[i] += 13;
      if (arr[i] > 'Z')
      {
        arr[i] -= 26;
      }
    }
 
    cout << arr[i];
  }
}

복잡도

  • 시간: O(L) (L: 문자열 길이)
  • 공간: O(L)