class Solution {
public String solution(String s, String skip, int index) {
String answer = "";
int first = 'a';
int last = 'z';
StringBuilder sb = new StringBuilder();
int[] pass = new int[skip.length()];
for(int i = 0; i < skip.length(); i++) {
pass[i] = skip.charAt(i);
}
StringBuilder를 활용해서 효율적으로 문자열을 생성한다.
first와 last는 'a'와 'z'를 아스키코드로 변환한 숫자이다.
pass는 skip의 각 문자를 아스키코드로 변환하여 숫자로 만든 배열이다.
문자 변환 로직
for(int i = 0; i < s.length(); i++) {
int now = s.charAt(i);
for(int j = 1; j <= index; j++) {
now += 1;
if(now > last) now = first;
for(int k = 0; k < pass.length; k++) {
if(now == pass[k]) {
j--;
break;
}
}
}
sb.append(String.valueOf((char) now));
}
's' 문자열의 각 문자를 순회하며 index만큼 이동시킨다.
이동하는 과정에서 z를 넘어가면 다시 a로 이동시킨다.
이동할 때마다 pass에 있는 문자와 동일하게 되면 j를 감소시켜 그 문자는 카운트 하지 않는다.
결과 반환
answer = sb.toString();
return answer;
}
}
전체 코드
class Solution {
public String solution(String s, String skip, int index) {
String answer = "";
int first = 'a';
int last = 'z';
StringBuilder sb = new StringBuilder();
int[] pass = new int[skip.length()];
for(int i = 0; i < skip.length(); i++) {
pass[i] = skip.charAt(i);
}
for(int i = 0; i < s.length(); i++) {
int now = s.charAt(i);
for(int j = 1; j <= index; j++) {
now += 1;
if(now > last) now = first;
for(int k = 0; k < pass.length; k++) {
if(now == pass[k]) {
j--;
break;
}
}
}
sb.append(String.valueOf((char) now));
}
answer = sb.toString();
return answer;
}
}