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 배열을 문자열로 인코딩한다.]