개발일기
[프로그래머스] 자바 시저 암호 문제 풀이 본문
https://school.programmers.co.kr/learn/courses/30/lessons/12926
import java.util.*;
class Solution {
private static final char[] SMALL_ALPHA = new char[] {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
private static final char[] BIG_ALPHA = new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
public String solution(String s, int n) {
char[] targetAlphabet = s.toCharArray();
StringBuilder sb = new StringBuilder();
for(char alphabet : targetAlphabet) {
sb.append(push(alphabet, n));
}
return sb.toString();
}
private char push(char alphabet, int number) {
if(alphabet == ' ') {
return ' ';
}
if(isBig(alphabet)) {
int alphabetIndex = ((alphabet - 'A') + number) % 26;
return BIG_ALPHA[alphabetIndex];
}
int alphabetIndex = ((alphabet - 'a') + number) % 26;
return SMALL_ALPHA[alphabetIndex];
}
private boolean isBig(char alphabet) {
return Character.isUpperCase(alphabet);
}
}
SMALL_ALPHA , BIG_ALPHA 두개의 불변 배열 만들어주고 push, isBig 메서드를 만들어주었다.
이유는 대문자인지 아닌지 판별하기 위해서 이고, push를 solution클래스에서 하는 방법도 있겠지만, indent를 1로 만들어주기 위해서 만들어주었다.
이에 따라서 순환하는 로직과 실질적으로 중요 로직이 책임이 분리되어 있는 것을 확인 할 수 있다.
본격적으로 push메서드가 실질적인 모든 핵심 로직이 담겨있는 로직이다.
여기서 alphabet이 대문자이면 'A'를 빼준다. 그 이유는 실질적으로 위에서 만들어준 불변 배열의 A인덱스가 0부터 시작하기 때문이다.
그 후, number 더하고 26이라는 숫자 즉, z 가 넘었을 경우를 대비하여 % 26 으로 나누어주었다.
'Algorithm' 카테고리의 다른 글
자연수 뒤집어 배열로 만들기 - Level 1 (0) | 2024.12.27 |
---|---|
[Programmers] 삼각 달팽이 자바 (0) | 2024.12.19 |
프로그래머스 - 보석 쇼핑 (0) | 2024.12.02 |
프로그래머스 - 섬연결하기 (0) | 2024.12.02 |
프로그래머스 호텔 방 배정 (0) | 2024.12.02 |