컴퓨터 프로그래밍/알고리즘
프로그래머스_시저암호
깝돌이
2020. 5. 25. 13:55
https://programmers.co.kr/learn/courses/30/lessons/12926
코딩테스트 연습 - 시저 암호
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가
programmers.co.kr
1. s를 char[] 배열로 바꿉니다.
2. for 문으로 각각의 아즈키 코드값에 n을 더해줍니다.
(아즈키 코드값이 0일 경우에는 그대로 0이 됩니다.)
3. 아즈키 코드 값이 소문자 일때랑 대문자 일때로 나눠서 생각 해야합니다.
4. 소문자 일 경우에 더해준 값이 z를 넘어 갈 경우를 위해서 a의 아스키코드값으로 나눈 나머지로 합니다.
5. 대문자 일 경우에는 A의 아스키 코드값으로 나눠줍니다.
public static String solution(String s, int n) {
String answer = "";
char[] charArrayS = s.toCharArray();
for (int i = 0; i < charArrayS.length; i++) {
if (charArrayS[i] >= 97 && charArrayS[i] <= 122) {
if ((charArrayS[i] + n) > 122) {
answer += (char) (96 + (charArrayS[i] + n) % 122);
}else {
answer += (char) ((charArrayS[i] + n));
}
} else if (charArrayS[i] >= 65 && charArrayS[i] <= 90) {
if ((charArrayS[i] + n) > 90) {
answer += (char) (64 + (charArrayS[i] + n) % 90);
}else {
answer += (char) ((charArrayS[i] + n));
}
} else if (charArrayS[i] == 32) {
answer += " ";
}
}
return answer;
}
<남풀이>
String caesar(String s, int n) {
String result = "";
n = n % 26;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isLowerCase(ch)) {
ch = (char) ((ch - 'a' + n) % 26 + 'a');
} else if (Character.isUpperCase(ch)) {
ch = (char) ((ch - 'A' + n) % 26 + 'A');
}
result += ch;
}
return result;
}