[프로그래머스] 시저 암호 (JAVA)

retryzip·2023년 1월 25일
0

프로그래머스

목록 보기
30/35

📌 문제 설명

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "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"

📌 코드

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 = answer.concat(" ");
            else if((char)(c + n) > 90 && Character.isUpperCase(c)){
                int a = (char)(90-c);
                c += a;
                c -= 26;
                c += (n-a);
                answer = answer.concat(String.valueOf(c));
            }
            else if((char)(c+n) > 122 && Character.isLowerCase(c)){
                int a = (char)(122-c);
                c += a;
                c -= 26;
                c += (n-a);
                answer = answer.concat(String.valueOf(c));
            } else answer = answer.concat(String.valueOf((char)(c+n)));
        }
        return answer;
    }
}

📌 문제 해결 과정

💡 아스키 코드를 이용 - 먼저 substring()으로 한 문자씩 잘랐을 때 자른 문자가 대문자이고 Z의 아스키 코드를 초과했을 때 Z의 아스키 코드인 90에서 자른 문자의 아스키 코드만큼 뺀 값인 ac에 더해 주면 Z가 되고, 대문자 A의 아스키 코드가 65이기 때문에 26만큼 빼 줘야 대문자 처음으로 갈 수 있다 이후 원래 더해야 하는 n 값에서 이미 더한 값인 a를 빼 준 값을 c에 더해 주면 된다 소문자도 이런 방식으로 해 주면 되고 소문자 a의 아스키 코드 97과 소문자 z의 아스키 코드 122인 것만 바꿔 주면 된다 소문자, 대문자 각각 마지막 아스키 코드를 초과하지 않는다면 그냥 cn을 더한 값을 answer에 concat()으로 연결시켜 주고 자른 문자가 공백이면 그대로 공백을 answer에 연결시켜 주었다

profile
공부는 많은 양을 하진 않더라도 꾸준히 매일 하기

0개의 댓글