[프로그래머스/Java] 시저 암호

Moon·2022년 10월 31일
0
post-thumbnail

🙂 문제

Level.1 : 시저 암호


💡 풀이

  • 알파벳 , 문자열의 거리 라는 키워드를 보면 바로 아스키코드를 떠올릴 수 있을 것이다.
    • A(65) ~ Z(90)
    • a(97) ~ z(122)

문제에 주어진 예시처럼 z를 4만큼 밀게되면 z -> a -> b -> c -> d 이기 때문에 d가 된다. z는 122이고 d는 100인데 알파벳이 26글자이기 때문에 122-26+4를 해서

class Solution {
    public String solution(String s, int n) {
        String answer = "";
        for(int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if(ch == ' ') {
                answer += ch;
                continue;
            }
            if(ch >= 'a' && ch <= 'z') {
                if(ch + n > 'z') {
                    answer += (char)(ch - 26 + n);
                } else {
                    answer += (char)(ch + n);
                }
            } else if(ch >= 'A' && ch <= 'Z') {
                if(ch + n > 'Z') {
                    answer += (char)(ch - 26 + n);
                } else {
                    answer += (char)(ch + n);
                }
            }
        }
        return answer;
    }
}

사실 대/소문자에 상관없이 해줘야하는 연산이 같기 때문에 조건문을 일일이 써주는 게 맞는지에 대한 고민을 계속 했다.

(char)(ch - 26 +n)(char)(ch + n) 

다른 사람들의 풀이를 보고나서야 isUpperCase()isLowerCase()가 떠올랐다.


💬 추가 내용

  • 시저암호가 진짜 존재하는 건지 궁금해서 찾아보니 정말 존재하는 암호화 방식이었다.

    사실 이 문제의 이름인 시저 암호카이사르 암호라고도 부르는 고대 암호로 문제의 내용대로 key값을 받아 해당 숫자만큼 평문을 쉬프트해주는 치환암호이다. 쉽게 사용할 수 있는 대신 철자의 빈도와 자주 사용되는 단어, 형태를 이용해서 쉽게 풀린다는 단점이 있다고 한다.

profile
매일 성장하는 개발자 되기😊

0개의 댓글