본문으로 바로가기

[HackerLank] Caesar Cipher - 문제풀이

category 알고리즘/HackerRank 2022. 3. 16. 00:07

Description

주어진 문자열을 k만큼 알파벳 배치를 rotate해서 암호화 하여 반환하는 문제입니다.

Original alphabet:      abcdefghijklmnopqrstuvwxyz
Alphabet rotated +2:    cdefghijklmnopqrstuvwxyzab

m -> o
i -> k
d -> f
d -> f
l -> n
e -> g
-    -
O -> Q
u -> w
t -> v
z -> b

Solution 1. ASCII

public static String  caesarCipher(String s, int k) {

    k = k % 26;
    StringBuilder sb = new StringBuilder();

    for (char c : s.toCharArray()) {
        if(Character.isLetter(c)){
            int ascii = c+k;
            if ((Character.isLowerCase(c) && !Character.isLetter(ascii))
                    || (Character.isUpperCase(c) && !Character.isUpperCase(ascii))
            ) ascii -= 26;
            sb.append((char)ascii);
        }else{
            sb.append(c);
        }
    }
    return sb.toString();
}

문자가 아닐경우는 그냥 결과에쓰고 문자일경우 ascii코드에서 k만큼 더해서 오른쪽에 있는 문자를 사용하게 합니다. 각 문자를 벗어나는 케이스라면 -26(알파벳개수)를 해서 다시 a,A부터 시작하여 기록합니다.

Reference

 

Caesar Cipher | HackerRank

Encrypt a string by rotating the alphabets by a fixed value in the string.

www.hackerrank.com