시저 암호
문제 설명
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
제한 조건
- 공백은 아무리 밀어도 공백입니다.
- s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
- s의 길이는 8000이하입니다.
- n은 1 이상, 25이하인 자연수입니다.
입출력 예
작성코드
class Solution {
public String solution(String s, int n) {
String answer = "";
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (ch == ' ') {
answer += ch;
continue;
}
if (Character.isLowerCase(ch)) {
answer += (char) ((ch - 'a' + n) % 26 + 'a');
} else if (Character.isUpperCase(ch)) {
answer += (char) ((ch - 'A' + n) % 26 + 'A');
}
}
return answer;
}
}
코드설명
- 4번라인 : 입력받은 문자열 길이만큼 for문을 통해 반복해준다.
- 5번라인 : ch변수에 .charAt()메서드를 이용해 한문자씩 담는다.
- 6~8번라인 : 만약에 ch가 공백이라면 answer값에 더해주고 continue로 반복문을 다시 돌린다.
- 11~15라인 : 여기서 .isLowerCase()메서드는 입력받은 인자가 소문자일때 true을 반환하고 .isUpperCase()메서드는 대문자일 때 true를 반환하는 메서드이다.
따라서 만약에 입력받은 인자값이 소문자일 경우 12번 라인과 같은 연산처리를 해준다. 여기서 character형은 ASCII값으로 계산되기 때문에 연산처리가 가능하다. (a=97, b=98 ... z=122 / A=65, B=66 ... Z=90)
여기서 입력값에 +n값만 더해준다면 'z'값이 들어오면 다시 'a'값이 되도록 연산처리를 해주어야 한다. 그 방법은 %26 나머지 연산을한 후 다시 'a'값을 더해주면 가능하다. 대문자인 경우도 동일하게 연산처리 해주면 원하는 결과값을 리턴할 수 있다.