알고리즘 공부/프로그래머스
프로그래머스 코딩테스트 연습 - 연습문제 - 시저 암호
HRuler
2020. 10. 3. 03:48
1. 문제
문제 설명
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요. 제한 조건
|
2. 나의 풀이
class Solution {
public String solution(String s, int n) {
String answer = "";
for(int i = 0; i < s.length(); i = i + 1) {
if((int)s.charAt(i) == 32) {
answer += " ";
}else if((int)s.charAt(i) < 91 && (int)s.charAt(i) + n > 90) {
answer += (char)((int)s.charAt(i) + n - 26);
}else if((int)s.charAt(i) < 91) {
answer += (char)((int)s.charAt(i) + n);
}else if((int)s.charAt(i) < 123 && (int)s.charAt(i) + n > 122) {
answer += (char)((int)s.charAt(i) + n - 26);
}else {
answer += (char)((int)s.charAt(i) + n);
}
}
return answer;
}
}
3. 다른 사람 풀이
// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
class Caesar {
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;
}
public static void main(String[] args) {
Caesar c = new Caesar();
System.out.println("s는 'a B z', n은 4인 경우: " + c.caesar("a B z", 4));
}
}