우선, 문자열들을 배열로 변경한 뒤 각각의 인덱스를 index
만큼 더하고
그 사이에 skip
이 있다면 추가로 더하는 방향을 생각해보았다.
수정 전 코드
public String solution(String s, String skip, int index) {
char[] sArray = s.toCharArray();
char[] skipArray = skip.toCharArray();
for (int i = 0; i < sArray.length; i++) {
for (int j = 0; j < skipArray.length; j++) {
if (sArray[i] <= skipArray[j] && skipArray[j] <= sArray[i] + index) {
sArray[i]++;
}
}
sArray[i] += index;
while (sArray[i] > 122) {
sArray[i] -= 26;
}
}
String answer = new String(sArray);
return answer;
}
이 코드로는 처음 입출력 예의 테스트는 통과했으나
제출 후 채점하기에서 처참한 결과가 나왔다.
디버그를 실행해서 찾다보니
s = "xy"
, skip = "za"
, index = 1
일 때
결과값으로 "yb"
가 나와야하지만 "ya"
가 출력되었다.
원인은 s
에 index
만큼 모두 더하고 난 뒤에 'z'를 넘어간다면 -26을 하도록 설계해서 'a'의 스킵 유무를 확인하지 못했기 때문이었다.
수정 후 코드
public String solution(String s, String skip, int index) {
char[] sArray = s.toCharArray();
for (int i = 0; i < sArray.length; i++) {
for (int k = 0; k < index; k++) {
sArray[i]++;
if (sArray[i] > 'z') {
sArray[i] -= 26;
}
if (skip.contains(String.valueOf(sArray[i]))) {
k--;
}
}
}
String answer = new String(sArray);
return answer;
}
s
의 배열의 각 인덱스에 1씩 더하면서 skip
에 포함된다면 한번 더 더하는 과정을 반복하는 코드로 수정하였다.