반응형

1. 문제 설명

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

- 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가 됩니다.

- 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

 

 

2. 제한 조건

- 공백은 아무리 밀어도 공백입니다.

- s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.

- s의 길이는 8000이하입니다.

- n은 1 이상, 25이하인 자연수입니다.

 

 

3. 입출력 예

 

s n result
"AB" 1 "BC"
"z" 1 "a"
"a B z" 4 "e F d"

 

 

4. 문제 풀이 코드

class Solution {

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

- 저는 아스키코드를 이용해서 문제를 풀었습니다.

 

- 아스키코드에서 알파벳 대문자 'A'는 65, 'Z'는 90입니다.

- 알파벳 소문자는 'a'는 97, 'z'는 122입니다.

 

- 먼저 공백은 그냥 공백으로 입력되기 때문에 if문으로 처리해주었습니다.

- 그리고 ascii라는 int 타입 변수를 만들어서 밀린 수(n)을 더했습니다.

 

- 더한 숫자를 다시 문자로 변환하여 소문자일 경우 'z'가 넘는지, 대문자일 경우 'Z'가 넘는지 if문으로 체크하여 차이값을 빼주었습니다.

- 차이값이 26인 이유는 알파벳 A(a)와 Z(z)는 25차이가 나기 때문입니다.

 

- 위의 조건들을 모두 거쳐 answer 문자열을 만들면 끝!

 

 

 


이상으로 프로그래머스 Level 1. 시저 암호 문제를 JAVA 언어로 풀어보았습니다.


 

반응형