반응형
1. 문제 설명
- 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다.
- 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가 됩니다.
- 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
2. 제한 조건
- 공백은 아무리 밀어도 공백입니다.
- s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
- s의 길이는 8000이하입니다.
- n은 1 이상, 25이하인 자연수입니다.
3. 입출력 예
s | n | result |
"AB" | 1 | "BC" |
"z" | 1 | "a" |
"a B z" | 4 | "e F d" |
4. 문제 풀이 코드
class Solution {
public String solution(String s, int n) {
String answer = "";
int ascii;
for( int i = 0; i < s.length(); i++ ) {
if( s.charAt(i) == ' ' ) {
answer += " ";
} else {
ascii = (int)s.charAt(i) + n;
if( s.charAt(i) >= 'A' && s.charAt(i) <= 'Z' && ascii > 'Z' ) {
ascii -= 26;
}
if( s.charAt(i) >= 'a' && s.charAt(i) <= 'z' && ascii > 'z' ) {
ascii -= 26;
}
answer += (char)ascii;
}
}
return answer;
}
}
- 저는 아스키코드를 이용해서 문제를 풀었습니다.
- 아스키코드에서 알파벳 대문자 'A'는 65, 'Z'는 90입니다.
- 알파벳 소문자는 'a'는 97, 'z'는 122입니다.
- 먼저 공백은 그냥 공백으로 입력되기 때문에 if문으로 처리해주었습니다.
- 그리고 ascii라는 int 타입 변수를 만들어서 밀린 수(n)을 더했습니다.
- 더한 숫자를 다시 문자로 변환하여 소문자일 경우 'z'가 넘는지, 대문자일 경우 'Z'가 넘는지 if문으로 체크하여 차이값을 빼주었습니다.
- 차이값이 26인 이유는 알파벳 A(a)와 Z(z)는 25차이가 나기 때문입니다.
- 위의 조건들을 모두 거쳐 answer 문자열을 만들면 끝!
이상으로 프로그래머스 Level 1. 시저 암호 문제를 JAVA 언어로 풀어보았습니다.
반응형
'Web Developer's Story > PROGRAMMERS' 카테고리의 다른 글
[프로그래머스] Level 1. 자연수 뒤집어 배열로 만들기 (JAVA) (0) | 2020.08.24 |
---|---|
[프로그래머스] Level 1. 핸드폰 번호 가리기 (JAVA) (0) | 2020.08.21 |
[프로그래머스] Level 1. 정수 제곱근 판별 (JAVA) (0) | 2020.08.20 |
[프로그래머스] Level 1. x만큼 간격이 있는 n개의 숫자 (JAVA) (0) | 2020.08.19 |
[프로그래머스] Level 1. 문자열 다루기 기본 (JAVA) (0) | 2020.08.18 |