티스토리 뷰

💻JAVA 코드 바로보기

 

 

문제 설명

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

 

 


🌼JAVA 알고리즘

 

초기화면

 

 

Ascii Code

 

 

 

 

 

 

풀이과정

문자열을 한글자씩 검사하여
1)공백일 경우 answer에 공백을,
2)옮겼을 때 영문자일 경우 이동한 문자를,
3)옮겼을 때 영문자가 아닐 경우 문자-26(a와 z의 사이 거리)를
answer에 추가하는 방법을 사용했으나 안맞는 경우가 존재했다.

=> 'Z'+10 = 90 + 10 = 100 = 'd' => 2)조건에 true값으로 적용되어 예상값 'J'가 나오지 않는다. 
=> 소문자의 경우와 대문자의 경우를 따로 보아야함을 알 수 있다.
class Solution {
    public String solution(String s, int n) {
        String answer = "";
        
        for(int i=0;i<s.length();i++){
            char check = s.charAt(i);
            if(check==' '){
                answer+=' ';
                continue;
            } 
            
            if((check+n>='a'&&check+n<='z')||(check+n>='A'&&check+n<='Z')) 
                answer+=Character.toString((char)(check+n));
            else 
                answer+=Character.toString((char)(check+n-26));
        }
        return answer;
    }
}

 

 

class Solution {
    public String solution(String s, int n) {
        String answer = "";
        
        for(int i=0;i<s.length();i++){
            char check = s.charAt(i);
            if(check==' '){
                answer+=' ';
                continue;
            } 
            if(check>='a'&&check<='z'){
                if((check+n>='a'&&check+n<='z')){
                    answer+=Character.toString((char)(check+n));
                }
                else 
                    answer+=Character.toString((char)(check+n-26));
            }
            else if(check>='A'&&check<='Z'){
                if(check+n>='A'&&check+n<='Z'){
                    answer+=Character.toString((char)(check+n));
                }
                else 
                    answer+=Character.toString((char)(check+n-26));
            }

        }
        return answer;
    }
}
위의 코드에서
소문자일 경우 if(check>='A'&&check<='Z')와
대문자일 경우 if(check>='A'&&check<='Z')
isLowerCase()isUpperCase()를 사용하여 좀 더 단순화했다.

 

 

 

완성코드

class Solution {
    public String solution(String s, int n) {
        String answer = "";
        
        for(int i=0;i<s.length();i++){
            char check = s.charAt(i);
            char add = (char)(check+n);
            if(check==' '){
                answer+=' ';
                continue;
            } 
            if(Character.isLowerCase(check)){
                if(Character.isLowerCase(check+n)) answer+=add;
                else answer+=(char)(add-26);
            }
            else if(Character.isUpperCase(check)){
                if(Character.isUpperCase(check+n)) answer+=add;
                else answer+=(char)(add-26);
            }
        }
        return answer;
    }
}

 

 

 

 

 

 

 


링크

 

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

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

programmers.co.kr

 

 

About Me

💻GitHub/KimSky904 KimSky904 - Overview Department of New Media Software. KimSky904 has 8 repositories available. Follow their code on GitHub. github.com

code-review.tistory.com

 

댓글