본문 바로가기

[BOJ] - JAVA

[백준] 11655 : ROT13 JAVA 풀이

 

1. 문자열을 입력받는다.

2. 13글자씩 민 문자열을 저장할 StringBuilder를 생성한다.

3. 문자열을 한 글자씩 검사해서 알파벳일 경우 13글자를 민다.

예를 들어 A라면 L이 되도록 하면 된다.

그런데 원래 알파벳이 O였다면 B가 되어야 한다는 점을 주의해야 한다.

O는 15번째 알파벳인데 알파벳의 총 개수는 26개이기 때문에

단순히 O+13을 하면 28이 돼 알파벳의 개수를 넘어 전혀 상관없는 글자가 되기 때문이다.

따라서 14번째 알파벳인 N을 기준으로 N 이전의 알파벳이라면 +13을 하고

N 이후의 알파벳이라면 -13을 해주면 된다.

4. 각 자리의 알파벳을 상황에 맞게 변형시키고 StringBuilder.append()로 문자열을 생성한다.

알파벳이 아니라면 본래의 문자를 그대로 append()한다.

5. 완성된 StringBuilder를 출력한다.

import java.io.*;
public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        StringBuilder sb = new StringBuilder();
        
        for(int i=0;i<str.length();i++){
            char c = str.charAt(i);
            if(c>='a'&&c<='z'){
                if(c>='n'){
                // 단순히 c-13을 계산한 결과는 int임
                // 하지만 sb.append는 문자를 추가하는 메서드라서 (char)로 캐스팅을 해줘야 함
                    sb.append((char)(c-13));
                }
                else{
                    sb.append((char)(c+13));
                }
            }
            else if(c>='A'&&c<='Z'){
                if(c>='N'){
                    sb.append((char)(c-13));
                }
                else{
                    sb.append((char)(c+13));
                }
            }
            else{
                sb.append(c);
            }
        }
        System.out.println(sb);
        
    }
}