본문 바로가기

Study/Algorithm 문제

BOJ5598 : 카이사르 암호 Java, Kotlin

문제


가이우스 율리우스 카이사르(Gaius Julius Caesar)는 고대 로마 군인이자 정치가였다. 카이사르는 비밀스럽게 편지를 쓸 때, 'A'를 'D로', 'B'를 'E'로, 'C'를 'F'로... 이런 식으로 알파벳 문자를 3개씩 건너뛰어 적었다고 한다.

26개의 대문자 알파벳으로 이루어진 단어를 카이사르 암호 형식으로 3문자를 옮겨 겹치지 않게 나열하여 얻은 카이사르 단어가 있다. 이 카이사르 단어를 원래 단어로 돌려놓는 프로그램을 작성하시오.

각 문자별로 변환 전과 변환 후를 나타낸 건 아래와 같다.

변환전    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
변환후    D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

예를 들어서, 이 방법대로 단어 'JOI'를 카이사르 단어 형식으로 변환한다면 'MRL'을 얻을 수 있고, 앞의 예와 같은 방법으로 얻은 카이사르 단어 'FURDWLD'를 원래 단어로 고치면 'CROATIA'가 된다.

입력


입력은 한 줄로 이루어져 있으며, 그 한 줄에는 대문자 알파벳으로 구성된 단어가 1개 있다. 단어는 최대 1000자 이하이다.

출력


입력받은 카이사르 단어를 원래 단어로 고친 걸 출력하면 된다.

입출력 예시


입력 예시 1

MRL

출력 예시 1

JOI

입력 예시 2

FURDWLD

출력 예시 2

CROATIA

접근

  1. 입력받은 단어를 알파벳 단위로 쪼갠다.
  2. 입력 예시 1을 보면 다음과 같이 되어 있다.
입력예시 출력예시 솔루션
M J M으로부터 -3번째 글자
R O R으로부터 -3번째 글자
L I L으로부터 -3번째 글자
  1. 글자 하나를 비교해서 -3번째 글자로 돌려놓으면 된다.
  2. 아스키 코드를 사용해서 -3번째 글자를 추적한다.
  3. 출력한다.

답안 예시

Java

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        // 입력받기
        Scanner sc = new Scanner(System.in);
        String input = sc.next();

        // 글자를 쪼개서 넣어줄 배열
        char [] charArr = new char [input.length()];

        // 세글자씩 당겨서 ASCII 'A'와 값 비교
        for (int i = 0; i < input.length(); i++) {
            if(input.charAt(i)-3<'A') { // D ~ Z까지에 대한 처리
                charArr[i] = (char) (input.charAt(i)+23);
            } else {    // A, B, C에 대한 처리
                charArr[i] = (char) (input.charAt(i)-3);
            }
        }

        // 출력
        for (int i = 0; i < input.length(); i++) {
            System.out.print(charArr[i]);
        }

    }
}

Kotlin

fun main(args: Array<String>){

    val input = readLine()!!
    val charArr = arrayOfNulls<Char>(input.length)

    for (i in input.indices) {
        charArr[i] = if (input[i] - 3 < 'A') input[i] + 23
                     else                    input[i] - 3
    }

    charArr.forEach { print(it) }
}

'Study > Algorithm 문제' 카테고리의 다른 글

[11650] 좌표 정렬하기 Java, Python  (0) 2022.04.16