백준 알고리즘(C++)

백준 11655번 ROT13(C++)

coding232624 2023. 12. 13. 17:09

문제

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

 

11655번: ROT13

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

www.acmicpc.net

 

해설

알파벳이 26개인것을 인지하고 문제를 보면 "문장" -> "암호화1번한 문장" -> "다시한번 암호화 한 문장(2번암호화)"라는 조건을 통해 뭔가 1대1대응이 되는 규칙이 있다는 것을 파악 한 후 아스키 코드상에서 13을 더한 값과 대칭되는 것을 파악

그 후 알파벳에 해당하는 아스키 코드 값에서는 13만큼 더한 값을 ret(결과)에 저장

그 외에는 그대로 ret에 저장

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
using namespace std;
string S,ret;
 
int main(){
    getline(cin,S);
    for(int i = 0; i < S.size(); i++){
        if(65<= S[i] && S[i]<=77)
            ret += S[i] + 13;
        else if(78<= S[i] && S[i] <=90)
            ret += S[i] - 13;
        else if(97<= S[i] && S[i]<= 109)
            ret += S[i] + 13;
        else if(110<= S[i] && S[i]<=122)
            ret += S[i] - 13;
        else
            ret += S[i];
    }
    cout << ret;
    return 0;    
}
 
cs