BOJ/11655) ROT13
ROT13(11655), Bronze1
https://www.acmicpc.net/problem/11655
문제풀이
- 입력 받은 문자열을 toCharArray()를 사용하여 char형 배열로 접근한다.
- char형 배열의 각 문자 c가 소문자인지 대문자인지 구분한 뒤, c + 13에 해당하는 알파벳을 찾아 출력한다.
Lower case | Upper case |
---|---|
ASCII코드를 활용하면 쉽게 풀 수 있는 문제이다. 다만 각 문자에서 +13을 해준 값이 알파벳의 끝 'Z'혹은 'z'를 넘어가는지 확인해야 한다.
🤔 'Z' 혹은 'z'를 넘어가는 경우
c+13 이 A/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을 고려하지 못해서 오류가 생겼었다.
나중에 문자열 관련 문제 풀 때 도움이 될 것 같아서 기록해보았다.
Author And Source
이 문제에 관하여(BOJ/11655) ROT13), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@syeon-c/BOJ11655-ROT13저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)