Algorithm/기타
[백준 11655번] ROT13
agility
2020. 1. 1. 20:33
백준알고리즘 11655번 : ROT13
알파벳을 13번째만큼 밀어서 암호를 만들어내는 문제이다.
알파벳의 갯수는 총 26개이기때문에, 위로 13번을 밀어보내든, 아래로 13번을 보내든 어차피 같은 문자가 될 것이다.
예를들면 1번째 알파벳인 A를 13번 뒤로밀면, B, C, D, E, ... , N이 되고,
앞으로 밀어도 역시, Z, Y, X, W, ... , N이 될 것이다.
대문자는 대문자끼리, 소문자는 소문자끼리 밀어주고, 여차 다른 문자는 그대로 둔다.
예컨대 숫자나 공백 같은 것들은 그대로 둬야한다는 뜻이다.
ASCII코드로 문자열의 각 문자들을 변환해주고, 그 ASCII 코드를 13번 민 다음, 다시 문자의 형태로 출력하면 된다.
풀이 과정
1. 받은 문자열을 선언하고, 선언한 문자열의 각 문자들을 byte 형태로 받아 배열에 담는다.
2. ASCII code의 알파벳 대문자(65~90), 알파벳 소문자(97~122) 범위에 맞추어 설정한 조건문대로
배열의 byte 값을 변경해준다.
3. byte 배열을 문자열로 인코딩한 다음, 이를 출력한다.
소스 ▽
더보기
import java.util.Scanner;
public class Main {// 11655번 ROT13
public static void main(String[] args) {
// ASCII코드 변환.
Scanner sc = new Scanner(System.in);
String originText = sc.nextLine();
byte[] bt = originText.getBytes();// 문자열의 각 문자들을 byte형태로 받아 배열에 하나씩 담는다.
for (int i = 0; i < bt.length; i++) {
if ((bt[i] >= 65 && bt[i] < 78) || (bt[i] >= 97 && bt[i] < 110)) {
bt[i] += 13;
} else if ((bt[i] >= 78 && bt[i] <= 90) || (bt[i] >= 110 && bt[i] <= 122)) {
bt[i] -= 13;
}
}
String byteToString = new String(bt);// byte code 배열을 문자열로 인코딩한다.
System.out.println(byteToString);
}
// 대문자 알파벳 : 65~90
// 소문자 알파벳 : 97~122
// space : 32..그 외의 숫자들 역시 변환을 해주어서는 안된다.
}
Summary
1. byte [] bt = originText.getBytes(); [문자열의 각 문자들을 byte 배열에 담는다]
2. String byteToString = new String(bt); [byte code 배열을 문자열로 인코딩한다.]