Hayden's Archive

[알고리즘] 프로그래머스 : 시저 암호 본문

Algorithm

[알고리즘] 프로그래머스 : 시저 암호

_hayden 2020. 5. 28. 03:50

알고리즘 문제 출처 : 프로그래머스 https://programmers.co.kr/learn/courses/30/lessons/12926

 

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

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

programmers.co.kr

 


내가 작성한 코드

아스키코드 숫자값을 활용하여 문제를 풀었다. 아스키코드에서 대문자는 65~90, 소문자는 97~122의 값을 가지는데 들어오는 문자열을 char[] 배열로 변환하여 각각의 문자를 정수로 변환하여 조건문으로 분류한다. 공백은 아스키코드로 0이므로 0일 때는 그냥 지나가게 하고 알파벳일 경우는 원래 아스키번호에 이동하는 n만큼 더하고 시작 알파벳(A, a)의 아스키코드 숫자로 나눈 나머지를 반복 주기 26만큼 나눈 나머지로 하여 65에 더한다. 그 뒤 char형으로 캐스팅하면 된다.

class Solution {
    public String solution(String s, int n) {
        String answer = "";
        char[] sChar = s.toCharArray();
        int asciiNum = 0;
        int totalNum = 0;
        for(int i=0; i<sChar.length; i++){
            asciiNum = (int)sChar[i];
            if(asciiNum == 0) continue;
            totalNum = asciiNum + n;
            if(asciiNum>=65 && asciiNum<=90){//대문자
                totalNum = 65+(totalNum%65)%26;
                sChar[i] = (char)totalNum;
            }
            if(asciiNum>=97 && asciiNum<=122){//소문자
                totalNum = 97+(totalNum%97)%26;
                sChar[i] = (char)totalNum;
            }
        }
        answer = new String(sChar);
        return answer;
    }
}

 

참고 : 아스키코드 https://blog.naver.com/qodhr222/221963720609