11655번: ROT13

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

www.acmicpc.net

문제 간단설명)

소문자 대문자를 13칸 밀어서 출력.

 

풀이)

아스키코드를 참고했다.

>아스키코드는 더보기에..

소문자나 대문자를 입력받으면 +13 을 해주는데,

그 값이 대문자일때 90을 넘기거나, 소문자일때 122를 넘긴다면

26을 빼주고 출력한다.

나머진 그대로 출력.

 

아스키코드에 의해 컴퓨터에서 문자 'A'는 숫자 65와 같다.

그래서 13칸을 밀려면 65+13 = 78 인데 이를 문자형으로 출력하면 'N'이 나온다.

ROT13문제는 이를 이용하여 푼다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String input = br.readLine();
 
        for(int i = 0; i < input.length(); i++){
            char ch = input.charAt(i);
 
            if(('a' <= ch && ch <= 'z')){
                ch += 13;
                if(ch > 122) ch -= 26;
                bw.write(ch);
 
            }else if('A' <= ch && ch <= 'Z'){
                ch += 13;
                if(ch > 90) ch -= 26;
                bw.write(ch);
            }else{
                bw.write(ch);
            }
        }
        bw.flush();
        bw.close();
    }
}
 
cs

 

+ Recent posts