반응형
프로그래머스 시저 암호 - JAVA
문제 설명
- 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다.
- 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다.
- "z"는 1만큼 밀면 "a"가 됩니다.
- 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
제한 조건
- 공백은 아무리 밀어도 공백입니다.
- s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
- s의 길이는 8000이하입니다.
- n은 1 이상, 25이하인 자연수입니다.
문제 풀이
- 문자열 answer에 한글자 씩 추가하면 비용이 커 StringBuilder를 사용.
- 소문자와 대문자인 경우 다음의 공식을 사용하여 문자를 이동 후 answer에 추가.
- 2번 예제로 다음의 공식을 설명한다.
- 'z'(아스키 코드 122) + 1 을 하면 아스키 코드로 123이 된다.
- 123을 이제 -'a'(아스키 코드 97)을 하면 26이 남는다.
- 26을 % 26을 하면 0이 되면 'a'를 더해줌으로 97이 된다.
- 이제 97을 다시 char타입으로 변경.
- 공백인 경우 바로 answer에 추가.
소스 코드
class Solution {
public String solution(String s, int n) {
StringBuilder answer = new StringBuilder(); // 1
for (char c : s.toCharArray()) {
if (Character.isLowerCase(c)) { // 2
answer.append((char)((c + n - 'a') % 26 + 'a'));
} else if (Character.isUpperCase(c)) { // 2
answer.append((char)((c + n - 'A') % 26 + 'A'));
} else { // 3
answer.append(c);
}
}
return answer.toString();
}
}
반응형
'알고리즘(Algorithm) > 프로그래머스(Programmers)' 카테고리의 다른 글
[프로그래머스] 이상한 문자 만들기 - JAVA (0) | 2021.10.31 |
---|---|
[프로그래머스] 약수의 합 - JAVA (0) | 2021.10.29 |
[프로그래머스] 문자열을 정수로 바꾸기 - JAVA (0) | 2021.10.27 |
[프로그래머스] 소수 찾기 - JAVA (0) | 2021.10.27 |
[프로그래머스] 서울에서 김서방 찾기 - JAVA (0) | 2021.10.27 |