새소식

알고리즘 문제풀이/프로그래머스

[문자열, 아스키코드] Level1 프로그래머스 시저암호 자바(java) 풀이

  • -

프로그래머스 시저암호 풀이

문제 정리

  1. 알파벳이 주어졌을때 n만큼 미룬 문자열을 반환하여라
  2. 예를들어 a가 주어졌을때 1만큼 밀면 b가 된다.
  3. 공백은 밀어도 그대로 공백이다
  4. z에서 1만큼 밀면 a가 된다.


문제 풀이

이 문제는 아스키 코드 값을 이용하여 풀 수 있습니다.
알파벳 개수: 26개
소문자: 97122
대문자: 65
90

  1. 문자를 하나하나씩 직접 n만큼 밉니다. 만약 i번째 문자가 공백인 경우 무시합니다.
  2. 대문자와 소문자의 경우를 나누어서 풉니다.
  3. 대문자의 경우 아스키 코드 값이 65~90 입니다. n만큼 밀고 90을 넘었다면 26만큼 감소시켜 줍니다. 26은 a-z의 개수입니다.
  4. 소문자의 경우도 마찬가지로 똑같이 해줍니다.


프로그래머스 시저 암호 자바 코드

주석 달아두었습니다!!

class Solution {
    public static void main(String[] args){
        String s = "AB";
        String s2 = "z";
        String s3 = "a B z";

        System.out.println(solution(s, 1));
        System.out.println(solution(s2, 1));
        System.out.println(solution(s3, 4));
    }

    public static String solution(String s, int n) {
        char[] arr = s.toCharArray();   // character 배열로 변환

        for(int i=0, len=arr.length; i<len; i++){
            if(arr[i] == ' ')    // 공백 무시
                continue;

            // 대문자 (65 ~ 90)
            if(arr[i] >=65 && arr[i] <= 90){
                arr[i] += n;
                if(arr[i] > 90)  // Z를 넘은 경우 A로 다시 돌아간다
                    arr[i] -= 26;
            }
            // 소문자( 97 ~ 122)
            else if(arr[i] >= 97 && arr[i] <= 122){
                arr[i] += n;
                if(arr[i] > 122)    // n만큼 미뤄서 z를 넘은 경우 A로 돌아간다. 알파벳의 개수 만큼 빼면됨
                    arr[i] -= 26;
            }
        }

        return String.valueOf(arr); // 문자열로 변환
    }
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.