class Solution {
public String solution(String s, String skip, int index) {
String answer = "";
char[] cArrAnswer = new char[s.length()];
for(int i=0;i<s.length();i++){
char cOldChar = s.charAt(i);
int nPlusIndex = 0;
int cNewChar = (cOldChar+index) > 122 ? (cOldChar+index) % 123 + 97 : (cOldChar+index) % 123;
for(int j=0;j<skip.length();j++){
if ( (int)cOldChar < (int)skip.charAt(j) && (int)skip.charAt(j) < cNewChar ){
nPlusIndex++;
}
}
cNewChar = (cNewChar+nPlusIndex) > 122 ? (cNewChar+nPlusIndex) % 123 + 97 : (cNewChar+nPlusIndex) % 123;
cArrAnswer[i] = (char)(cNewChar);
}
answer = new String(cArrAnswer);
return answer;
}
}
1차 접근 순서에서 1.에 오류가 있었다.
index만큼 뒤의 알파벳을 한꺼번에 계산해서 찾으면 z->a로 넘어가는 경우,
2. if문을 건너뛰어버리기 때문이다.
애초에 대소비교로 skip 배열 내를 탐색하는 거 자체가 잘못됐었다.
알파벳을 뒤로 하나씩 바꿔보면서 skip 배열에 그 알파벳이 있는지 확인하고 작업하는 게 핵심 접근이었다.
알파벳을 뒤로 하나씩 바꿔보면서 skip 배열에 그 알파벳이 있는지 확인하고 작업
class Solution {
public String solution(String s, String skip, int index) {
String answer = "";
char[] cArrAnswer = new char[s.length()];
for(int i=0;i<s.length();i++){
char cOldChar = s.charAt(i);
int cNewChar = cOldChar;
// index 길이만큼 반복
for(int j=0;j<index;j++){
cNewChar = cNewChar + 1; // 알파벳 1자씩 뒤로
if (cNewChar > 122) { //'z'를 벗어나는 경우
cNewChar = (int)'a'; // 'a'로 돌아온다
}
//바꾼 문자가 skip해야 할 문자인지 확인하고 건너뛴다
for(int p =0;p<skip.length();p++){
if ((char)cNewChar == skip.charAt(p)){
--j;
break;
}
}
}
cArrAnswer[i] = (char)cNewChar;
}
answer = new String(cArrAnswer);
return answer;
}
}