본문 바로가기
알고리즘 공부...공......공

[백준: 알고리즘_Java] 11655번_ROT13

by MININI 2022. 1. 17.

 

<문제>

 

 


<풀이>

 

앞의 알파벳 개수 세는 문제와 마찬가지로, 이 문제도 아스키코드를 이용하면 쉽게 풀리는 문제이다.

  1. 입력받은 문자열을 char배열에 넣고 for문으로 앞에서부터 검사한다.
  2. char배열의 문자를 int로 형변환 해주어 아스키코드로 변환한다.
  3. 변환한 문자가 대문자일때와 소문자일때로 나눔(아스키코드로)
  4. 대문자, 소문자의 경우 각각 아스키코드에서 13을 더했을 때 그 범위를 넘어가면 +13대신 -13 해주면 됨(알파벳이 각각 26개라 가능)

 

 

 

 

 

import java.util.*;
import java.io.*;
public class ROT13 {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //입력 문자열
        char[] input = br.readLine().toCharArray();
        //한글자씩 검색, 변경
        for(int i = 0; i < input.length; i++) {
            int ascii = (int)input[i];
            if(ascii>=65 & ascii<=90) {
                //대문자
                if(ascii+13>90) {
                    //대문자 소문자 각 26개 이므로, 13을 더했을 때 범위를 넘어가는 수는 -13을 해주면 됨.
                    input[i] = (char)(ascii-13);
                } else {
                    input[i] = (char)(ascii+13);
                }
            } else if(ascii>=97 & ascii <= 122) {
                //소문자
                if(ascii+13>122) {
                    input[i] = (char)(ascii-13);
                } else {
                    input[i] = (char)(ascii+13);
                }
            }
        }

        System.out.println(input);

    }
}

<결과>

 

댓글