[JAVA/프로그래머스] 연습문제: 시저 암호

👀 문제

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

👊 도전

1. 설계

  1. charAt()으로 문자를 하나씩 추출한 후, n만큼 밀었을때 알파벳 범위를 넘어가면 아스키코드를 이용해 알파벳이 순회할 수 있게 한다.

2. 구현 (성공 코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
 *
 * @author HEESOO
 *
 */
 class Solution {
   public String solution(String s, int n) {
       String answer = "";
       char alpha;
       for(int i=0;i<s.length();i++){
           alpha=s.charAt(i);
           if(alpha==' ') answer+=" ";
           else if('A'<=alpha&&alpha<='Z'){
               if(alpha+n>'Z'){
                   answer+=(char)(alpha+n-26);
               }
               else{
                   answer+=(char)(alpha+n);
               }
           }
           else{
              if(alpha+n>'z'){
                  answer+=(char)(alpha+n-26);
              }
              else{
                  answer+=(char)(alpha+n);
              }
           }
       }
       return answer;
   }
 }
 

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. 아스키코드를 이용한다.
    • charAt()으로 문자를 추출한 후, n만큼 밀었을 때 소문자 또는 대문자 범위를 벗어난다면 -26하여 다시 알파벳 범위에 들어오게 한다.

👏 해결 완료!

문제에서 n은 25이하인 자연수라 하였기 때문에 -26해도 상관없었지만, 왠만하면 %26하는 게 좋을 것 같다. n이 26이상 큰 수라면 -26으로는 알파벳 범위에 들어오지 못할 수도 있기 때문이다.