[Java] programmers-"시저 암호"

김빛나리·2022년 1월 3일

문제 설명

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



제한사항

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


입축력 예

snresult
"AB"1"BC"
"z"1"a"
"a B z"4"e F d"


알고리즘

  1. 문자열 s의 길이만큼 for문을 돌리고, .charAt() 함수를 사용해서 해당 문자가 공백인지 확인하고, 공백이면 공백을 저장한다.
  2. Character.isUpperCase() 함수를 사용해서 대문자와 소문자로 나누어서 아스키코드를 사용해 저장한다.
    • 대문자일 때는 Z가 십진법으로 90이라 그 이상을 넘어가면 90을 빼주고, 64를 더해준다. (A가 십진법으로 65)
    • 그 외의 대문자 경우에는 n만큼 더해주면 된다.
    • 소문자일 때는 z가 십진법으로 122이라 그 이상을 넘어가면 122를 빼주고, 96을 더해준다. (a가 십진법으로 97)
    • 그 외의 소문자 경우에는 n만큼 더해주면 된다.


내 소스 코드

class Solution {
    public String solution(String s, int n) {
        String answer = "";
        
        for(int i=0;i<s.length();i++) {
            if(s.charAt(i) == ' ') answer += " ";
            else {
                if(Character.isUpperCase(s.charAt(i))) {
                    if(s.charAt(i)+n > 90) answer += Character.toString(64 + (s.charAt(i)+n-90));
                    else answer += Character.toString(s.charAt(i) + n);
                }
                else {
                    if(s.charAt(i)+n > 122) answer += Character.toString(96 + (s.charAt(i)+n-122));
                    else answer += Character.toString(s.charAt(i) + n);
                }
            }
        }
        
        return answer;
    }
}

0개의 댓글