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

NaHyun_kkiimm·2021년 7월 23일
0

알고리즘

목록 보기
3/18
post-thumbnail

< 문제 정보 >

[ 문제 ]

입력으로 문자열과 자연수가 들어오면, 알파벳을 해당 자연수만큼 밀어 다른 알파벳으로 바꾸는 암호화를 해보자.

[ 예시 ]

(1) 입력 : "AB", 1
- 출력 : "BC"
(2) 입력 : "z", 1
- 출력 : "a"
(3) 입력 : "a B z", 4
- 출력 : "e F d"

[ 규칙 ]

(1) 문자열로 '공백', '소문자', '대문자'가 들어올 수 있다.
(2) 공백은 아무리 밀어도 공백이다.
(3) 문자열의 길이는 8000이하이다.
(4) 자연수는 1이상 25이하이다.

[ 프로그래머스 ]


< 풀이 >

  • String형으로 들어온 문자열을 배열로 나누어 초기화한다.
  • 들어온 배열의 문자열이 대문자, 소문자, 공백인지 구분한다.
    - 각 인덱스의 문자열에 자연수를 더하고, 소문자일 경우 'z'를 넘는다면, 대문자일 경우 'Z'를 넘는다면 26을 빼 'a', 'A'부터 마저 계산하도록 한다.

[ 코드 ]

import java.util.Arrays;
class Solution {
    public String solution(String s, int n) {
        String answer = "";
        char[] arr= new char[s.length()];
        for(int i=0;i<s.length();i++){		// String 문자열을 배열에 각각 초기화
            arr[i]= s.charAt(i);
        }
        for(int i=0;i<s.length();i++) {
            if ((65<=arr[i])&&(arr[i]<=90)) {		// 대문자일 경우
                if (arr[i]+n<91){			// 계산 값이 'Z'를 넘지 않는 경우
                    answer+=(char)(arr[i]+n);		// 계산
                }
                else					// 'Z'를 넘는 경우
                    answer+=(char)(arr[i]+n-26);	// 'A'로 돌아와서 마저 계산
            }   /*65~90 대문자*/
            else if ((97<=arr[i])&&(arr[i]<=122)) {	// 소문자일 경우
                if (arr[i]+n<123)			// 'z'를 넘지 않는 경우
                    answer+=(char)(arr[i]+n);		// 계산
                else
                    answer+=(char)(arr[i]+n-26);	// 'z'를 넘는 경우
            }   /*97~122 소문자*/
            else if (arr[i]==32)			// 공백의 ASCII는 32이다.
                answer+=" ";
        }
        return answer;
    }
}
profile
이 또한 지나가리라

0개의 댓글