본문 바로가기
알고리즘/프로그래머스 풀이

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

by krapoi 2021. 11. 12.
반응형

이번에 풀어볼 문제는 시저 암호이다.

 

문제 설명

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

 

문제만 봐도 아스키코드를 사용해야 할 것 같은 느낌

 

제한 조건

  • 공백은 아무리 밀어도 공백입니다.
  • s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
  • s의 길이는 8000 이하입니다.
  • n은 1 이상, 25 이하인 자연수입니다.

 

이제 코드를 보러 가자

 

import java.util.Arrays;

public String solution(String s, int n) {
        char[] arr = new char[s.length()];
        arr = s.toCharArray();
        for(int i = 0; i < n; i++){
            for(int j = 0; j < s.length(); j++){
                if(arr[j] == ' ') continue;
                else if(arr[j] == 'z' || arr[j] == 'Z') arr[j] -= 26;
                arr[j] += 1;
            }
        }

        String answer = new String(arr);
        System.out.println(answer);
        return answer;
    }

 

처음에 char배열을 s의 길이만큼 만들어 준다.

그다음 s.toCharArray를 이용해 s를 char 배열로 만들어 준다. (char [] arr = s.toCharArray(); 도 가능)

 

그다음 for문을 n만큼 돌리고 2중 for문으로 s의 길이만큼 돌린다.

 

for문 안에서는 공백이면 continue를 시키고 z 또는 Z 일시 a, A가 되기에 26을 빼준다. (아스키코드 사용)

if문이 다 False라면 arr [j] += 1을 하여 한 칸 밀어준다.

 

그다음 String 변수에 arr을 넣어준 뒤 리턴 시킨다. 

반응형