프로그래머스 시저암호 풀이
문제 정리
- 알파벳이 주어졌을때 n만큼 미룬 문자열을 반환하여라
- 예를들어 a가 주어졌을때 1만큼 밀면 b가 된다.
- 공백은 밀어도 그대로 공백이다
- z에서 1만큼 밀면 a가 된다.
문제 풀이
이 문제는 아스키 코드 값을 이용하여 풀 수 있습니다.
알파벳 개수: 26개
소문자: 97122
대문자: 6590
- 문자를 하나하나씩 직접 n만큼 밉니다. 만약 i번째 문자가 공백인 경우 무시합니다.
- 대문자와 소문자의 경우를 나누어서 풉니다.
- 대문자의 경우 아스키 코드 값이 65~90 입니다. n만큼 밀고 90을 넘었다면 26만큼 감소시켜 줍니다. 26은 a-z의 개수입니다.
- 소문자의 경우도 마찬가지로 똑같이 해줍니다.
프로그래머스 시저 암호 자바 코드
주석 달아두었습니다!!
class Solution {
public static void main(String[] args){
String s = "AB";
String s2 = "z";
String s3 = "a B z";
System.out.println(solution(s, 1));
System.out.println(solution(s2, 1));
System.out.println(solution(s3, 4));
}
public static String solution(String s, int n) {
char[] arr = s.toCharArray(); // character 배열로 변환
for(int i=0, len=arr.length; i<len; i++){
if(arr[i] == ' ') // 공백 무시
continue;
// 대문자 (65 ~ 90)
if(arr[i] >=65 && arr[i] <= 90){
arr[i] += n;
if(arr[i] > 90) // Z를 넘은 경우 A로 다시 돌아간다
arr[i] -= 26;
}
// 소문자( 97 ~ 122)
else if(arr[i] >= 97 && arr[i] <= 122){
arr[i] += n;
if(arr[i] > 122) // n만큼 미뤄서 z를 넘은 경우 A로 돌아간다. 알파벳의 개수 만큼 빼면됨
arr[i] -= 26;
}
}
return String.valueOf(arr); // 문자열로 변환
}
}