https://www.acmicpc.net/problem/11655
Lower case | Upper case |
---|---|
![]() | ![]() |
ASCII코드를 활용하면 쉽게 풀 수 있는 문제이다. 다만 각 문자에서 +13을 해준 값이 알파벳의 끝 '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을 고려하지 못해서 오류가 생겼었다.
나중에 문자열 관련 문제 풀 때 도움이 될 것 같아서 기록해보았다.