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

2020. 6. 19. 18:09프로그래머스/LEVEL 1

class Solution {
    public String solution(String s, int n) {
        String answer = "";
        
        char[] temp = s.toCharArray();
        
        for(int i=0; i<temp.length; i++){
            if(temp[i]==' '){
                answer +=" ";
            }else if (temp[i]<='z' && temp[i]>='a'){
                if(temp[i]+n<='z'){
                    answer += Character.toString(temp[i]+n);
                }else{
                    answer += Character.toString('a'-1 + (temp[i]+n -'z')%26);
                }
            }else {
                if(temp[i]+n<='Z'){
                    answer += Character.toString(temp[i]+n);
                }else{
                    answer += Character.toString('A'-1 + (temp[i]+n -'Z')%26);
                }
                
            }
        }
        
        return answer;
    }
}

1. toCharArray() 메소드를 통해  문자열 s를 인덱스별로 char형으로 가진 배열로 만든다. (표현의 편의성을 위해서이다. 그냥  s.charAt(i)로 인데스 하나 하나에 접근하는 것도 상관없음.)

2. 각 문자를 읽으면서 공백일경우, 소문자일 경우, 대문자일 경우 로 나눈다.

3. 공백을 경우 answer에 그대로 공백을 넣어준다.

4. 소문자일 경우 해당 문자에서 n만큼 밀었을때 'z'보다 크다면, 초과된 만큼을 알파벳 전체 개수인 26으로 나눈 나머지만큼 a로부터 이동시킨다. 

5. 대문자일 경우 해당 문자에서 n만큼 밀었을때 'Z'보다 크다면, 초과된 만큼을 알파벳 전체 개수인 26으로 나눈 나머지만큼 A로부터 이동시킨다.