반응형
12926번 문제
코딩테스트 연습 - 시저 암호 | 프로그래머스 (programmers.co.kr)
풀이
영어 알파벳은 대소문자 각각 26개 입니다.
즉 아무리 많은 값을 더하더라도 26이라는 범위 내에서 순환되어야 합니다.
알파벳의 아스키 코드 값은 'A' = 65 / 'a' = 90 입니다.
A에 1을 더하면 66을 반환하며 이를 char 로 변환하면 'B' 입니다.
위 두가지 성질을 활용해 공식을 만들 수 있습니다.
✔ 공식
1. 대문자일 경우
(ch - 'A' + n) % 26 + 'A'
2. 소문자일 경우
(ch - 'a' + n) % 26 + 'a'
주의할 점은 입력에는 소문자,대문자,공백으로 이루어져 있어서 공백이 들어갈 수 있다는 점입니다.
공백을 따로 조건 처리하거나 대소문자를 조건 처리 해야 합니다.
public String solution(String s, int n) {
StringBuilder sb = new StringBuilder();
for(char ch : s.toCharArray()) {
if(ch != ' ') {
char a = Character.isLowerCase(ch) ? 'a' : 'A';
ch = (char) ((ch - a + n) % 26 + a);
}
sb.append(ch);
}
return sb.toString();
}
✅ boolean java.lang.Character.isLowerCase(char ch)
: 문자가 소문자인지 확인하여 소문자이면 true, 아니면 false 를 반환
✔ 테스트 케이스 실행 속도 : 평균 0.04ms / 최대 1.1ms
반응형
'Algorithm > Java' 카테고리의 다른 글
프로그래머스 - 문자열 내 마음대로 정렬하기 java (0) | 2022.07.01 |
---|---|
프로그래머스 - 문자열 내림차순으로 배치하기 java (0) | 2022.06.29 |
프로그래머스 - 최소직사각형 java :: 위클리 챌린지 :: 86491 (0) | 2022.06.22 |
프로그래머스 - 부족한 금액 계산하기 java :: 위클리 챌린지 (0) | 2022.06.21 |
프로그래머스 - 가운데 글자 가져오기 java (0) | 2022.06.20 |