문제 설명
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
제한 조건
- 공백은 아무리 밀어도 공백입니다.
- s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
- s의 길이는 8000 이하입니다.
- n은 1 이상, 25 이하인 자연수입니다.
입출력 예
| s | n | result |
| "AB" | 1 | "BC" |
| "z" | 1 | "a" |
| "a B z" | 4 | "e F d" |
내 풀이
class Solution {
public String solution(String s, int n) {
String answer = "";
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(c >= 'a' && c <= 'z') { //소문자
c = (char)(c+n);
if(c > 'z') {
c -= 26;
}
answer += c;
}
else if(c >= 'A' && c <= 'Z') { //대문자
c = (char)(c+n);
if(c > 'Z') {
c -= 26;
}
answer += c;
}
else if(c == ' ') { //공백
answer += c;
}
}
return answer;
}
}
해설
1. 문자열 s를 입력받으면 그 s의 길이만큼 for문이 동작된다
2. charAt()은 String으로 입력받은 문자열의 한 글자만 선택하여 char 타입으로 변환
- 문자열이 저장된 참조 변수 s 뒤에 .을 찍고 사용한다
- charAt()을 통해 String에서 char로 변환된 문자를 저장하기 위한 char 타입의 변수 c 선언
- s이 가리키는 문자열의 i번째 문자열을 char 타입으로 변환
- c는 문자열 s의 i번째 문자와 같다
3. 문자열의 요소를 소문자/대문자/공백으로 나누어 탐색
- 소문자의 경우 [c >= 'a' && c <= 'z'], 대문자의 경우 [c >= 'A' && c <= 'Z'], 공백의 경우 [c == ' ']로 나타냄
- for문을 도는 현재, 해당 문자 c에서 n의 거리만큼 떨어져 있는 알파벳을 다시 변수 c에 넣는다
- 이때 n의 타입은 int이므로 c+n 전체를 char로 바꿔주어야 한다
- 만약 c+n을 계산한 위치에 있는 알파벳이 대문자/소문자가 될 경우, 이를 소문자/대문자로 바꿔주어야 한다
- 'z' 또는 'Z'의 범위를 넘어가는 문자인지 확인하여 이를 판별
- 조건을 만족할 경우(대문자/소문자가 될 경우) 해당 문자에서 26을 빼 소문자/대문자로 바꾼다
- 문자열 s의 i번째 문자인 c를 모두 계산하였으니 이를 answer에 담는다