시저 암호 (자바)

김재현·2024년 4월 26일
0

알고리즘 풀이

목록 보기
80/89
post-thumbnail

문제

오답

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

먼저 공백을 처리 한 후, 문자열을 뽑아서 Char로 받은 cn을 더했다.
이 때 대소문자 모두if('z'<c || ('Z'<c && c<'a')) 에서 걸러질 것이라고 생각했다.
그러나 큰 오산이었다. 왜냐하면 아스키코드의 대문자와 소문자 사이의 크기가 7이기 때문이다.

n을 더했을 때 대문자가 소문자 범위에 들어가 버리는 것이었다..!

대문자와 소문자를 따로 처리해주어야했다...

정답 풀이

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

대소문자를 나누어 처리해주었더니 정답처리되었다.

다른 사람 풀이

class Solution {
        public String solution(String s, int n) {
            String answer = "";
            for(char ch : s.toCharArray()) {
                if(ch==' ') {
                    answer += ch;
                }else if(ch>='a'&& ch<='z'){
                    answer += (char)('a' + (ch+n-'a')%26);
                }else {
                    answer += (char)('A' + (ch+n-'A')%26);
                }
            }
            System.out.println(answer);
            return answer;
        }
    }

오호 이분은 알파벳에 n을 더하고 z혹은 Z를 넘어가는지 확인 하는 과정을,
n을 더해놓고 'a'를 뺀다음 %26로 확인하여 식을 간단하게 만들었다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글