티스토리 뷰
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12926
언어
자바 Java
로직
문자열 -> 문자 배열
char[] cArr = s.toCharArray();
공백 처리
현재 문자가 공백일 경우 반환할 문자열에 그대로 붙여줍니다.
if(!Character.isAlphabetic(c))
sb.append(" ");
문자 추가하기
ascii에는 현재 문자에서 n만큼 이동한 아스키코드 값이 저장되어 있습니다. 즉 문자가 아닌 아스키코드 값이 들어갈 수도 있겠죠. 그렇기 때문에 n만큼 이동한 아스키코드 값이 알파벳인지 체크할 필요가 있습니다.
아스키코드 값이 문자가 아닌 경우 26을 빼줍니다. 알파벳 개수가 총 26개이기 때문에 26을 빼주면 다시 알파벳이 될 수 있기 때문입니다.
if(c >= 'a' && c <= 'z') {
int ascii = (int)c + n;
if(ascii > 'z') {
ascii -= 26;
}
sb.append((char)ascii);
} else if(c >= 'A' && c <= 'Z') {
int ascii = (int) c + n;
if(ascii > 'Z') {
ascii -= 26;
}
sb.append((char)ascii);
}
코드
class Solution {
public String solution(String s, int n) {
StringBuffer sb = new StringBuffer();
char[] cArr = s.toCharArray();
for(char c : cArr) {
if(!Character.isAlphabetic(c))
sb.append(" ");
else {
if(c >= 'a' && c <= 'z') {
int ascii = (int)c + n;
if(ascii > 'z') {
ascii -= 26;
}
sb.append((char)ascii);
} else if(c >= 'A' && c <= 'Z') {
int ascii = (int) c + n;
if(ascii > 'Z') {
ascii -= 26;
}
sb.append((char)ascii);
}
}
}
return sb.toString();
}
}
리팩토링
class Solution {
public String solution(String s, int n) {
StringBuffer sb = new StringBuffer();
char[] cArr = s.toCharArray();
for (char c : cArr) {
if (!Character.isAlphabetic(c))
sb.append(" ");
else {
int ascii = Character.isUpperCase(c) ? 'A' : 'a';
int pos = c - ascii;
pos = (pos + n) % 26;
ascii += pos;
sb.append((char)ascii);
}
}
return sb.toString();
}
}