문제

ROT13 백준 11655번

리뷰

아스키 코드를 이용해서 풀었다.

공백은 32 , 숫자는 '0'과 '9'는 48 ~ 57. 대문자 65 ~ 90, 소문자 97 ~ 122 이다.

찾아보니까 대소문으로 조건으로 비교하기 보다는

if(st[i] <= 'A' && st[i] <= 'Z'){} // 대문자 

else if(st[i] <= 'a' && st[i] <= 'z'){} // 소문자      

string STL에 있는 islower 와 isupper를 쓰면 간결하게 짤 수 있었다.

코드

영 맘에 안들지만 내가 처음에 맞은 코드다.

#include <iostream>
#include <string>
using namespace std;

int main(void){

     string st;

     getline(cin, st);

     for(int i = 0; i < st.size(); i++){

         if(st[i] == ' ') cout << ' ';
         else if(st[i] <= '9'){
             cout << st[i];
        }
         else if(st[i] <= 'Z'-13){ // 대문자  
            st[i] += 13; 
            cout << st[i];
        }else if(st[i] <= 'Z'){
            st[i] = st[i] + 13 - 26;  
            cout << st[i];
        }else if(st[i] <= 'z'-13){ // 소문자  
            st[i] += 13; 
            cout << st[i];
        }else{
            st[i] = st[i] + 13 - 26;
            cout << st[i];
        }

    }

    return 0;
}

코드2

질문게시판의 다른 분들의 코드를 보며 고쳐본 코드다.

#include <iostream>
#include <string>
using namespace std;

int main(void){

     string st;
     getline(cin, st);
     int len = st.length();

     for(int i = 0; i < len; i++){

         if(isupper(st[i])){ // 대문자 

            if(st[i] + 13 > 'Z') st[i] = st[i]+13-26;
            else st[i] += 13;

        }else if(islower(st[i])){ // 소문자 

            if(st[i] + 13 > 'z') st[i] = st[i]+13-26;
            else st[i] += 13;         
        }
        cout << st[i];
    }

    return 0;
}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

접미사 배열 백준 11656번  (0) 2020.08.27
네 수 백준 10824  (0) 2020.08.27
에디터 백준 1406번 c++  (0) 2020.08.26
스택 수열 백준 1874번  (0) 2020.08.26
2007년 백준 1924번  (0) 2020.08.25

+ Recent posts