import java.util.*;
class Solution {
public String solution(String s, String skip, int index) {
ArrayList<Character> list = new ArrayList<>();//각 문자는 char이므로 어레이 리스트로 char선언
for(int i = 0; i < 26; i++){//알파벳이 있는 리스트를 만들어 준다.리스트에는 모든 알파벳이 전부 포함된다.
list.add((char)('a' + i));//아스키코드를 이용한다 아스키 코드에서의 a의 값은 저번에 풀었던 문제를 생각하자
}
for(Character alphabet : skip.toCharArray()){//String.toCharArray()를 사용하면 각각의 인덱스에 맞게 단어를 쪼개준
//다.이번에는 보다 코드를 줄이기 위해 Character item:을 사용해서 skip에 속한 단어들을 아예 제거해주어
//제외하고 건너뛴다는 목적에 맞추어준다.
list.remove(alphabet);
}
//이제 가져온 String s의 내용을 index에 맞추어서 더해주고 그 값을 뽑으면 된다.
StringBuilder myBuilder = new StringBuilder();
for(Character alphabet2 : s.toCharArray()){//각각의 단어를 get한다 위에 나온 것과 동일한 for문의 구조이다.
int index2 = list.indexOf(alphabet2);//알파벳 리스트에 저장된 알파벳의 값을 뽑아낸다
index2 = (index2 + index)%list.size();//만약 리스트의 총 길이를 초과할 경우를 대비해준다.
myBuilder.append(list.get(index2));//구한 알파벳을 append해준다.
}
return myBuilder.toString();
}
}
어레이 리스트에 아예 알파벳을 전부 넣고 마치 어렸을떄 알파벳 달력을 이용하는 느낌으로 풀어보았다.주의해야되는 점은 아스키 코드가 자주나온다는 점과 String은 배열이라는점 그리고 배열의 길이를 넘어갔을떄의 예외처리였다.