[BOJ] 11655 "ROT13" 문제 풀이 & 소스 코드 with C/C++

    반응형

    #INFO

    난이도 : BRONZE1

    알고리즘 유형 : 자료구조

    문제 출처 : https://www.acmicpc.net/problem/11655

     

    11655번: ROT13

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

    www.acmicpc.net


    #SOLVE

    아스키 코드를 이용하는 간단한 문자열 문제이다. a(97) ~ m(109) 사이의 문자는 13을 더해도 (ROT13 문자열로 만들어도) 아스키의 범위를 벗어나지 않으니 그대로 출력하고 , n(110) ~ z(122) 사이의 문자는 13을 더하면 알파벳 아스키 범위를 벗어나니 13을 빼준다.

    		if (('a' <= str[i] && str[i] <= 'a' + 12) || ('A' <= str[i] && str[i] <= 'A' + 12)){
    			cout << (char)(str[i] + 13);
    		}

    이는 대문자도 마찬가지이니, 똑같이 작성해 준다.

    else if (('n' <= str[i] && str[i] <= 'n' + 12) || ('N' <= str[i] && str[i] <= 'N' + 12)){
    			cout << (char)(str[i] - 13);
    		}

    나머지는 그냥 그대로 출력해 준다.

    		else {
    			cout << str[i];
    		}

    #CODE

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	//input
    	ios_base::sync_with_stdio(0);
    	cin.tie(0);
    	string str;
    	getline(cin, str);
    	
    	//solve
    	for (int i = 0; i < str.length(); ++i) {
    		if (('a' <= str[i] && str[i] <= 'a' + 12) || ('A' <= str[i] && str[i] <= 'A' + 12)){
    			cout << (char)(str[i] + 13);
    		}
    		else if (('n' <= str[i] && str[i] <= 'n' + 12) || ('N' <= str[i] && str[i] <= 'N' + 12)){
    			cout << (char)(str[i] - 13);
    		}
    		else {
    			cout << str[i];
    		}		
    	}
    	
    	return 0;
    }


    반응형

    댓글

    Designed by JB FACTORY