class Solution {
public String solution(String s, int n) {
String answer = "";
for(int i=0;i<s.length();i++) {
char c = s.charAt(i);
if(c==' ') {
answer+=c;
} else {
c+=n;
if('z'<c || ('Z'<c && c<'a')) {
c-=26;
answer+=c;
} else {
answer+=c;
}
}
}
return answer;
}
}
먼저 공백을 처리 한 후, 문자열을 뽑아서 Char
로 받은 c
에 n
을 더했다.
이 때 대소문자 모두if('z'<c || ('Z'<c && c<'a'))
에서 걸러질 것이라고 생각했다.
그러나 큰 오산이었다. 왜냐하면 아스키코드의 대문자와 소문자 사이의 크기가 7이기 때문이다.
n을 더했을 때 대문자가 소문자 범위에 들어가 버리는 것이었다..!
대문자와 소문자를 따로 처리해주어야했다...
class Solution {
public String solution(String s, int n) {
String answer = "";
for(int i=0;i<s.length();i++) {
char c = s.charAt(i);
if(c==' ') {
answer+=c;
}else if(c<='Z') {
c+=n;
if('Z'<c) {
c-=26;
answer+=c;
}else {
answer+=c;
}
}else {
c+=n;
if('z'<c) {
c-=26;
answer+=c;
}else {
answer+=c;
}
}
}
return answer;
}
}
대소문자를 나누어 처리해주었더니 정답처리되었다.
class Solution {
public String solution(String s, int n) {
String answer = "";
for(char ch : s.toCharArray()) {
if(ch==' ') {
answer += ch;
}else if(ch>='a'&& ch<='z'){
answer += (char)('a' + (ch+n-'a')%26);
}else {
answer += (char)('A' + (ch+n-'A')%26);
}
}
System.out.println(answer);
return answer;
}
}
오호 이분은 알파벳에 n
을 더하고 z혹은 Z를 넘어가는지 확인 하는 과정을,
n
을 더해놓고 'a'
를 뺀다음 %26
로 확인하여 식을 간단하게 만들었다.