시저 암호

문제


문제 풀이

해당 문제를 보고 원형큐 자료구조를 이용하면 좋겠다고 생각하고 접근하였다. 배열에 a - z , A- Z 까지의 값을 담아두고 입력되는 string 값과 배열에 있는 문자값을 비교하여 맞을 때 나오는 (index + n) % arr.length 로 처리하였음.  


나의 답안

 

public static String solution(String s, int n) {
    StringBuffer sb = new StringBuffer();
    char[] big = new char[26];
    char[] small = new char[26];

    char smallEng = 'a';
    char bigEng = 'A';

    for (int i = 0; i < small.length; i++) {
        small[i] = smallEng;
        smallEng++;
    }

    for (int i = 0; i < big.length; i++) {
        big[i] = bigEng;
        bigEng++;
    }

    for (int i = 0; i < s.length(); i++) {
        char space = ' ';
        if (s.charAt(i) == space) sb.append(" ");
        for (int j = 0; j < small.length; j++) {
            if (s.charAt(i) == small[j]) {
                sb.append(small[(j + n) % small.length]);
                break;
            } else if (s.charAt(i) == big[j]) {
                sb.append(big[(j + n)  % big.length]);
                break;
            }
        }
    }

    return sb.toString();
}

다른 답안

다른분들은 아스키 코드 번호를 이용해서 이미 정렬이 된 문자를 사용하는 방식으로 하였다. 

class Solution {
        public String solution(String s, int n) {
            String answer = "";
            for(char ch : s.toCharArray()) {
                if(ch==' ') {
                    answer += ch;
                }else if(ch>='a'&& ch<='z'){
                    answer += (char)('a' + (ch+n-'a')%26);
                }else {
                    answer += (char)('A' + (ch+n-'A')%26);
                }
            }
            System.out.println(answer);
            return answer;
        }
    }

'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글

[1차] 비밀지도  (0) 2023.03.18
최소직사각형  (0) 2023.03.17
예산  (0) 2023.03.16
3진법 뒤집기  (0) 2023.03.16
최대공약수와 최소공배수  (0) 2023.03.16