반응형
https://www.acmicpc.net/problem/11655
- 문제
- 문제 풀이
백준 11655번 ROT13은 브론즈 1 난이도의 구현 및 문자열 문제이다. 이 문제에서는 문자열이 주어졌을 때 "ROT13"으로 암호화한 내용을 출력하면 된다.
이 문제는 아스키코드를 이용해서 간단하게 풀 수 있다. 우선 ROT13 암호화란 한 문자를 13 글자씩 미는 암호화 방법이다. 예를 들어서 A는 13글자 밀어서 N이 되고, B는 13글자 밀어서 O가 된다. 다만, 이 문제에서는 대문자는 대문자로, 그리고 소문자는 소문자로 남아야 한다. 따라서 밑에 있는 아스키 표처럼 Z를 13글자 밀면 g가 되는데 대문자로 남아야 하기 때문에 M이 되어야 한다.
우선 자바에서 char형태를 아스키코드로 변환하려면 타입 변환 (캐스팅)을 하면 된다. 예를 들어서 char 형 문자인 c가 있다고 하겠다. 그러면 (int) c를 하면 이 c의 아스키코드를 얻을 수 있다.
따라서, ROT13 암호화를 하려면 (int) (c + 13)을 하면 된다. 다만, 대문자는 대문자로 남아야 하고, 소문자는 소문자로 남아야하기 때문에 대문자일 때 13을 더했을 때 가장 큰 Z의 90보다 크면 26을 빼주면 된다. 소문자도 마찬가지로 13을 더했을 때 122보다 크면 26을 빼주면 된다.
자세한 코드는 아래에 있는 코드를 참고하면 되겠다.
- 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String s = br.readLine();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!Character.isLetter(c)) {
sb.append(c);
continue;
}
int n = (int)c + 13;
//대문자일 때 90보다 크면 26 빼기
if (Character.isUpperCase(c) && n > 90) {
n -= 26;
}
//소문자일 때 122보다 크면 26 빼기
if (Character.isLowerCase(c) && n > 122) {
n -= 26;
}
sb.append((char)n);
}
System.out.print(sb);
}
}
반응형
'백준' 카테고리의 다른 글
[백준] 10820번 : 문자열 분석 – JAVA [자바] (0) | 2023.02.26 |
---|---|
[백준] 10824번 : 네 수 – JAVA [자바] (0) | 2023.02.19 |
[백준] 11047번 : 동전 0 – JAVA [자바] (0) | 2022.12.02 |
[백준] 14487번 : 욱제는 효도쟁이야!! – JAVA [자바] (0) | 2022.11.18 |
[백준] 2810번 : 컵홀더 – JAVA [자바] (0) | 2022.11.18 |
댓글