-
[백준 11655번] ROT13Algorithm/기타 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 배열을 문자열로 인코딩한다.]'Algorithm > 기타' 카테고리의 다른 글
[백준 2740번] 행렬 곱셈 (0) 2020.01.08 [백준 11005번] 진법 변환 2 (1) 2020.01.05 [백준 10798번] 세로읽기 (0) 2019.12.30 [백준 11050번] 이항 계수 1 (0) 2019.12.28 [백준 1193번] 분수찾기 (0) 2019.12.27