반응형
인증사진(2024-03-31)

문제
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
답
class Solution {
public String solution(String s, int key) {
char[] enc = new char[s.length()];
for(int i = 0 ; i < s.length() ; i++) {
char ch = s.charAt(i);
if (ch >= 'A' && ch <= 'Z') {
ch = (char) (((ch - 'A' + key) % 26) + 'A');
} else if (ch >= 'a' && ch <= 'z') {
ch = (char) (((ch - 'a' + key) % 26) + 'a');
}
enc[i] = ch;
}
return String.valueOf(enc);
}
}
시행착오
- s.length(i)을 사용했는데 이게 아니라 s.charAt(i)을 사용해야 한다.
s.length()는 문자열 기이를 반환하는거라 인덱스를 받지 않고 문자열 전체 길이만 반환함s.charAt()는 s의 특정 인덱스 i에 해당하는 문자를 반환함.
- if문을 아스키말고 문자로 설정
class Solution {
public String solution(String s, int key) {
//시저암호는 input한 평문 + key 하는 구조이고, 아스키코드가 A-Z(65-90), a~z (97~122)일 때만 적용된다.
char[] enc = new char[s.length()];
for(int i=0 ; i < s.length() ; i++) {
char ch = s.length(i);
if (ch >= 65 && ch <= 90) {
ch = ch + key;
if(ch > 90)
ch = ch - 26; //90초과일때는 A로 돌아오게 -26
}else if (ch >= 97 && ch <= 122) {
ch = ch + key;
if(ch > 122)
ch = ch - 26; //122초과일때는 a로 돌아오게 -26
}
enc[i] = ch;
}
return String.valueOf(enc);
}
}
요약
알파벳 범위 안에 들면 ch - A 로 ch와 A간 고리를 계산한 후 key 값만 큼 더함.
그리고 알파벳 개수인 26으로 나눈 나머지를 구함. 알파벳을 끝가지 밀었을때 다시 A (a)로 돌아오게 함.
반응형
'DEV' 카테고리의 다른 글
[javaStudy] 예산 (0) | 2024.04.14 |
---|---|
[javaStudy] 소문자로 바꾸기 (0) | 2024.04.07 |
[pythonStudy] 두 개 뽑아서 더하기 (0) | 2024.03.24 |
[pythonStudy] 세균 증식 (1) | 2024.03.17 |
[Nodejs] NodeJS와 NPM 완전히 삭제 (0) | 2024.03.12 |