본문 바로가기
알고리즘/문제 풀이

[Java] 프로그래머스 > 시저 암호

by _eunji_ 2022. 2. 11.

https://programmers.co.kr/learn/courses/30/lessons/12926

 

코딩테스트 연습 - 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀

programmers.co.kr

문제 설명

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

제한 조건

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

 

아스키코드표

아스키코드표는 위와 같다.

1. s문자열은 대문자, 소문자, 공백으로 이루어져 있기 때문에 if문으로 조건을 나눴다.

2. 반복문을 통해 문자열 한 글자씩 int 타입 변수 ascii에 일정 거리 n만큼 더해 저장한다. => 아스키코드값을 저장

3. 대문자와 소문자에서 각각 Z 다음은 A, z 다음은 a이기 때문에 대문자 Z와 소문자 z값이 넘어갈 때 26을 빼준다.

4. ascii 변수를 다시 char형으로 변환하여 answer 문자열에 더해준다.

5. 공백일 경우 공백을 더해준다.

 

 

내 코드

class Solution {
    public String solution(String s, int n) {
        String answer = "";
        
         for(int i=0;i<s.length();i++){
             int ascii =(int)(s.charAt(i))+n;
              //대문자
             if(s.charAt(i)>='A'&&s.charAt(i)<='Z'){
                 if(ascii>90) ascii-=26;
                answer+=(char)(ascii);
             }
             //소문자
             else if(s.charAt(i)>='a'&&s.charAt(i)<='z'){
                 if(ascii>122) ascii-=26;
                answer+=(char)(ascii);
             }
             //공백
             else{
                 answer+=" ";
             }
         }
        
        
        return answer;
    }
}

댓글