ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 11655번] ROT13
    Algorithm/기타 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

    댓글

Designed by Tistory.