빠에야는 개발중

시저 암호 본문

공부/알고리즘 문제

시저 암호

빠에야좋아 2018. 3. 5. 01:24

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다.

A를 3만큼 밀면 D가 되고 z를 1만큼 밀면 a가 됩니다. 공백은 수정하지 않습니다.

보낼 문자열 s와 얼마나 밀지 알려주는 n을 입력받아 암호문을 만드는 caesar 함수를 완성해 보세요.

  • “a B z”,4를 입력받았다면 “e F d”를 리턴합니다.


문자들이 공백으로 구분되어있고 출력도 공백을 유지하여 출력하기 때문에 배열에 한꺼번에 넣어서 알파벳만 시프트 해주는 식으로 했다. 그 때문에 continue를 넣는 등 다소 부자연스러운 코드가 나오긴 했는데 일단 풀었으니...


주요 로직은 대, 소문자를 구분하여 시프트값이 z나 Z를 넘으면 다시 a, A로 돌아올 수 있도록 26을 빼주는 것이다. 그리고 26 이상 시프트 하는 경우에는 나머지 연산을 해주었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Caesar {
    String caesar(String s, int n) {
        String result = "";
        char[] arr = s.toCharArray();
        n%=26;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == ' ')
                continue;
            if (arr[i] + n > 'z' || (arr[i] >= 'A' && arr[i] <= 'Z' && arr[i] + n > 'Z')) {
                arr[i] = (char) (arr[i] + n - 26);
            } else {
                arr[i] = (char) (arr[i] + n);
            }
        }
        result = new String(arr);
        return result;
    }
 
    public static void main(String[] args) {
        Caesar c = new Caesar();
        System.out.println("s는 'a B z', n은 4인 경우: " + c.caesar("a B z"4));
    }
}
 
cs


'공부 > 알고리즘 문제' 카테고리의 다른 글

다음 큰 수  (0) 2018.03.07
멀리 뛰기  (0) 2018.03.06
행렬의 곱셈  (0) 2018.03.04
정수 내림차순으로 배치하기  (0) 2018.03.04
최솟값 만들기  (0) 2018.03.04
Comments