ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] - 시저암호 (12926)
    알고리즘/프로그래머스 2024. 2. 28. 10:46

    📚 문제 - 12926

    어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.


    제한사항

    • 공백은 아무리 밀어도 공백입니다.
    • s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
    • s의 길이는 8000이하입니다. n은 1 이상, 25이하인 자연수입니다.

    입출력 예

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

     

    ⌨️ 작성한 코드

    class Solution {
        public static String solution(String s, int n) {
            // 결과를 저장할 StringBuilder 생성
            StringBuilder answer = new StringBuilder();
    
            // 문자열 s의 각 문자에 대해 반복
            for (char ch : s.toCharArray()) {
                // 알파벳인 경우만 처리
                if (Character.isLetter(ch)) {
                    // 대문자인지 소문자인지에 따라 기준값(base) 설정
                    char base = Character.isLowerCase(ch) ? 'a' : 'A';
                    // 현재 문자를 밀어서 새로운 문자 생성
                    char encrypted = (char) ((ch - base + n) % 26 + base);
                    // 결과에 새로운 문자 추가
                    answer.append(encrypted);
                } else {
                    // 알파벳이 아닌 경우 그대로 추가
                    answer.append(ch);
                }
            }
            return answer.toString();
        }
    }

     

    ✅ 배운 점

    • Character 클래스의 정적(static) 메소드
      - Character.isLetter(): 문자가 알파벳인지 여부를 판별하는데 사용
      - Character.isLowerCase(): 주어진 문자가 소문자인지 여부를 판별
    • Java에서는 문자 간의 산술 연산이 가능, 내부적으로 ASCII 또는 유니코드 값에 대한 산술 연산이 수행
      - 대문자 알파벳의 ASCII 코드 범위: 65 ~ 90 ( 'A'의 값 = 65 )
      - 소문자 알파벳의 ASCII 코드 범위: 97 ~ 122 ( 'a'의 값 = 97 )
      - 알파벳 범위 내에서 문자를 순환시킬 때는, % 26 연산을 수행한다. 알파벳은 26개의 문자로 이루어져 있으므로, 이 연산을 통해 26을 넘어가는 경우에는 다시 처음으로 돌아가게 한다.
    • 조건 연산자 x ? a : b
      - 조건식 x가 참(true)이면 조건 연산자의 결과는 a, 거짓(false)이면 조건 연산자의 결과는 b

      - if-else 문을 사용하여 동일한 작업을 수행하는 것과 동등

       
       
Designed by Tistory.