시저 암호

이윤설·2024년 3월 21일

제출코드

계속 실패해서 없음 ㅜㅜ

class Solution {
    public String solution(String s, int n) {
        String answer = ""; // 암호화된 문자열을 저장할 변수 초기화
        
        // 주어진 문자열 s의 각 문자에 대해 반복
        for(int i=0; i<s.length(); i++) {
            char ch = s.charAt(i); // 현재 문자를 ch 변수에 저장
            
            // 현재 문자가 소문자인 경우
            if(Character.isLowerCase(ch)) {
                // 'a'에서부터의 거리에 n을 더한 후 26으로 나눈 나머지를 계산하여 알파벳 순서를 결정
                // 이후 다시 'a'를 더하여 ASCII 코드상의 문자로 변환
                ch = (char) ((ch - 'a' + n) % 26 + 'a');
            }
            // 현재 문자가 대문자인 경우
            else if(Character.isUpperCase(ch)) {
                // 'A'에서부터의 거리에 n을 더한 후 26으로 나눈 나머지를 계산하여 알파벳 순서를 결정
                // 이후 다시 'A'를 더하여 ASCII 코드상의 문자로 변환
                ch = (char) ((ch - 'A' + n) % 26 + 'A');
            }
            
            // 변환된 문자를 결과 문자열에 추가
            answer += ch;
        }
        
        // 암호화된 문자열 반환
        return answer;
    }
}

1.'C' - 'A'를 하는 이유는, 문자 'C'가 알파벳 상에서 'A'로부터 얼마나 떨어져 있는지, 즉 'A'로부터의 상대적 거리를 계산하기 위함이다. 이 과정을 통해 각 알파벳 문자를 0부터 25까지의 숫자로 매핑할 수 있으며, 이는 알파벳의 순환적 이동을 처리하기 위한 계산에서 매우 중요한 단계다.

2.이제 'C'에서 2칸을 이동하려면, 'A'로부터의 위치인 2에 이동할 칸 수인 2를 더한다.
2 + 2 = 4다. 이는 'A'로부터 네 번째 위치에 해당하는 문자를 찾아야 함을 의미한다.

3.알파벳은 총 26개이므로, 결과값이 26을 넘어가는 경우 알파벳을 순환하기 위해 % 26 연산을 수행한다. 알파벳을 넘어서 이동해야 할 때(Z->B) 알파벳의 시작으로 다시 돌아오게 하기 위해 모듈로 연산 % 26을 사용한다. 이 경우 4는 26보다 작으므로 그대로 4(4%26=4)가 된다.

4.마지막으로, 계산된 상대적 위치인 4에 'A'의 ASCII 코드 값을 다시 더해 실제 알파벳 문자를 얻는다.
4 + 'A'. 여기서 'A'의 ASCII 코드 값은 65이므로, 4 + 65 = 69, 이는 ASCII 코드에서 'E'에 해당한다.

배운점

  • A의 ASCII는 25다.
  • ASCII를 통해 알파벳이 들어있는 배열을 관리할 수 있다.
profile
화려한 외면이 아닌 단단한 내면

0개의 댓글