✔ 시저 암호
문제 분석하기
문장에서 공백이 있을 경우에는 단순히 공백을 추가
문장에서 소문자가 있을 경우에 민 암호가 소문자를 넘을 경우 -26을 해주도록 함 (소문자는 계속 소문자 유지)
문장에서 대문자가 있을 경우에 민 암호가 대문자를 넘을 경우 -26을 해주도록 함 (대문자는 계속 대문자 유지)
손으로 풀어보기
- 문장에서 공백이 있을 경우에는 단순히 공백을 추가
- 문장에서 소문자가 있을 경우에 민 암호가 소문자를 넘을 경우 -26을 해주도록 함
- 문장에서 대문자가 있을 경우에 민 암호가 대문자를 넘을 경우 -26을 해주도록 함
- 변환한 암호문을 반환
슈도코드 작성하기
s(암호문 문자열)
n(거리)
answer(s를 n만큼 민 암호문)
for(i -> s의 길이만큼) {
ch(암호)
if(ch가 공백이라면) {
answer에 ch 추가
else if(ch가 소문자라면) {
if(ch + n이 소문자를 넘어간다면)
answer에 ch - 26 + n 추가
else
answer에 ch + n 추가
}
else if(ch가 대문자라면) {
if(ch + n이 대문자를 넘어간다면)
answer에 ch - 26 + n 추가
else
answer에 ch + n 추가
}
}
answer 반환
코드 구현하기
/**
* 12926) 시저_암호
*/
public class L015_12926 {
// s(암호문 문자열)
// n(거리)
public String solution(String s, int n) {
// answer(s를 n만큼 민 암호문)
String answer = "";
for (int i = 0; i < s.length(); i++) {
// ch(암호)
char ch = s.charAt(i);
// ch가 공백이라면
if (ch == ' ') {
// answer에 ch 추가
answer += ch;
}
// ch가 소문자라면
else if (ch >= 'a' && ch <= 'z') {
// ch + n이 소문자를 넘어간다면
if (ch + n > 'z')
// answer에 ch - 26 + n 추가 (소문자 처음부터 시작하기 위해 -26)
answer += (char) (ch - 26 + n);
else
// answer에 ch + n 추가
answer += (char) (ch + n);
}
// ch가 대문자라면
else if (ch >= 'A' && ch <= 'Z') {
// ch + n이 대문자를 넘어간다면
if (ch + n > 'Z')
// answer에 ch - 26 + n 추가 (대문자 처음부터 시작하기 위해 -26)
answer += (char) (ch - 26 + n);
else
// answer에 ch + n 추가
answer += (char) (ch + n);
}
}
// answer 반환
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L015_12926 solution = new L015_12926();
String s = "AB";
int n = 1;
String result = solution.solution(s, n);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[12930] 이상한 문자 만들기 (0) | 2023.12.27 |
---|---|
[12928] 약수의 합 (0) | 2023.12.27 |
[12925] 문자열을 정수로 바꾸기 (0) | 2023.12.26 |
[12922] 수박수박수박수박수박수? (0) | 2023.12.26 |
[12921] 소수 찾기 (0) | 2023.12.26 |