BOJ/11655) ROT13

syeon·2022년 1월 31일
0

코딩테스트

목록 보기
3/8

ROT13(11655), Bronze1


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

문제풀이

  1. 입력 받은 문자열을 toCharArray()를 사용하여 char형 배열로 접근한다.
  2. char형 배열의 각 문자 c가 소문자인지 대문자인지 구분한 뒤, c + 13에 해당하는 알파벳을 찾아 출력한다.
Lower caseUpper case

ASCII코드를 활용하면 쉽게 풀 수 있는 문제이다. 다만 각 문자에서 +13을 해준 값이 알파벳의 끝 'Z'혹은 'z'를 넘어가는지 확인해야 한다.

🤔 'Z' 혹은 'z'를 넘어가는 경우

c+13A/a 보다 작거나 같은 경우에는 그냥 출력하면 되지만, 더 큰 경우에는 알파벳 외의 다른 문자가 적힐 수 있기 때문에 조건부 처리를 해줘야 한다.

방법은 간단한다. 넘어가는 수만큼 'A/a'에 더해주면 된다.

c = 'm(115)'
--> ('c(115)' + 13) - 'z(122)' = 6
--> ('a(97)' - 1) + 6 = 'f(102)'

주의할 점은 계산에 'A/a'도 포함해야 하기 때문에 'A/a' - 1한 값에서 더해줘야 한다는 것

소스코드

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(char c : input.toCharArray()) {
            if (Character.isLowerCase(c)) {
                if ('z' < c + 13) bw.write(('a' - 1) + (c + 13) - 'z');
                else bw.write(c + 13);
            } else if (Character.isUpperCase(c)) {
                if ('Z' < c + 13) bw.write(('A' - 1) + (c + 13) - 'Z');
                else bw.write(c + 13);
            }
            else bw.write(c);
        }
        
        br.close();
        bw.flush();
    }
}

후기

쉬운 문제지만 'A/a'-1을 고려하지 못해서 오류가 생겼었다.
나중에 문자열 관련 문제 풀 때 도움이 될 것 같아서 기록해보았다.

profile
기록하려고 만든 개발블로그, 까먹지 말자!

0개의 댓글