decryptCaesarCipher

문제

암호화된 문자열과 암호화 키를 입력받아 복호화된 문자열을 리턴해야 합니다.
카이사르 암호(Caesar cipher)는 평문(plaintext)을 암호키 secret개만큼 (오른쪽으로) 평행이동시켜 암호화 합니다. 복호화는 암호화된 문자열을 원래의 평문으로 복원하는 것을 말합니다.

'hello'를 secret 3으로 암호화한 경우: 'khoor'
'codestates'를 secret 11로 암호화한 경우: 'nzopdelepd'

입력

인자 1 : str

  • String 타입의 알파벳 소문자 문자열

인자 2 : secret

  • int 타입의 암호화 키

출력

  • String 타입을 리턴해야 합니다.

주의 사항

  • 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다.
  • 공백은 그대로 두어야 합니다.
  • 입력된 문자열은 모두 소문자만 입력됩니다.

입출력 예시

String output = decryptCaesarCipher("khoor", 3);
System.out.println(output); // --> hello

output = decryptCaesarCipher("zruog", 3);
System.out.println(output); // --> world

 

 

해결방법

1. 입력받은 str 을 char[] 형으로 변환하여 인덱스로 다룰 수 있게 만듬

2. 아스키 코드를 참조하여 [ 해당 자리 문자 - secret ] 을 해줌으로써 복호화

3. 소문자만 가능하므로 97 ~ 122 에서 순환하게 만들어줌

 

소스코드

public class decryptCaesarCipher {
    public static void main(String[] args) {
        String res = decryptCaesarCipher("nzop delepd dfaazced jzf", 11);
        System.out.println(res);
    }

    public static String decryptCaesarCipher(String str, int secret) {
        // TODO:
        /*
        - when : 암호화된 문자열과 암호화된 키를 입력받음
        - then : 복호화된 문자열을 리턴
        - how : 카이사르 암호는 평문을 암호키개만큼 오른쪽으로 평행이동시켜 암호화한다.
         */
        String result = "";
        int temp = 0;
        int overNum = 0;
        //when
        char[] ch = str.toCharArray();

        //how
        for (int i = 0; i < ch.length; i++) {
            if(ch[i] == ' '){
                result += ch[i];
            }
            else{
                if(ch[i]-secret >= 97) temp = ch[i]-secret;
                else{
                    overNum = 96 - (ch[i] - secret);
                    temp = 122 - overNum;
                }
                System.out.println("i: "+i+" "+ "temp: "+temp);
                result += Character.toString((char)temp);
            }
        }

        //then
        return result;
    }
}

'알고리즘' 카테고리의 다른 글

Dynamic Programming  (0) 2022.09.26
후위 표기식  (0) 2022.09.25
인접 행렬 길찾기  (0) 2022.08.04
인접 행렬 생성하기  (0) 2022.08.04
문자열에서 숫자 추출 알고리즘  (0) 2022.08.01

+ Recent posts