Language/JAVA

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

paran21 2022. 1. 27. 12:41

처음에 n이 커서 알파벳 범위를 여러 번 도는 경우를 생각하지 못해서 통과하지 못했다.

n 대신 26으로 나눈 값 k를 더해줘서 알파벳 범위 안에서만 돌도록 조정해주었고,

대문자와 소문자로 경우를 나누어서 Z나 z는 추가로 -26을 해주었다.

class Solution {
    public String solution(String s, int n) {
String answer = "";
        //char배열로 바꿈
        char[] arr = s.toCharArray();
        for (int i = 0; i < arr.length; i++) {
            //알파벳 안에서만 돌면 되므로 26으로 나누어서 나머지값만 더함
            int k = n % 26;
            //대문자인데 더했을 때 'Z'보다 크거나, 소문자인데 더했을 때 'z'보다 크면 -26
            if ((arr[i] <= 'Z' && arr[i] + k > 'Z') || (arr[i] >= 'a' && arr[i] + k > 'z')) {
                arr[i] = (char) (arr[i] + k - 26);
                //공백은 그대로 공백
            } else if (arr[i] == ' ') {
                arr[i] = arr[i];
            } else {
                //그 외에는 k더함
                arr[i] = (char) (arr[i] + k);
            }
        }
        //char배열을 다시 String으로 변환
        answer = String.valueOf(arr);
        return answer;
    }
}