https://school.programmers.co.kr/learn/courses/30/lessons/155652

1. skip해야하는 문자들을 HashSet을 이용해 저장
2. s를 배열로 저장 후 index만큼 증가시킴 -> count를 이용해 while문을 사용해 count가 index보다 작을때 까지 반복하도록 함
3. - z보다 넘어갈 경우 a로 초기화
- skipSet에 있는 값을 포함할 경우 count에 반영하지 않는다.
4. 이렇게 바뀐 값을 answer에 하나하나 더함
// A1. 아스키코드
// 문자열 s의 각 알파벳을 하나씩 읽어와서 배열 ch 에 저장 -> index만큼 증가시킴(만약 증가하먄서 skip의 값을 만나면 +1) (만약 x가 넘어가면 x-a만큼 빼서 a로 돌아옴)
//skip의 문자열을 하나씩 읽어와서 배열 sk에 저장 -> sk에 해당되면 +1
class Solution {
public String solution(String s, String skip, int index) {
char[] ch = s.toCharArray();
char[] skipArray = skip.toCharArray();
int[] ascCh = new int[ch.length];
int[] ascSkip = new int[skipArray.length];
for(int i = 0; i < skipArray.length; i++){
ascSkip[i] = (int)skipArray[i];
}
for(int i = 0; i < ch.length; i++){
ascCh[i] = ((int)ch[i]) + 5;
for(int k : ascSkip){
if(ascCh[i] == k)
i ++;
}
ch[i] = (char)ascCh[i];
}
String answer = new String(ch);
return answer;
}
}
컬렉션을 이용하지 않고 배열로 풀어보려고 했는데, 알고리즘의 오류,,,,실패,,,,,
import java.util.*;
class Solution {
public String solution(String s, String skip, int index) {
//skipSet에 skip의 값을 하나하나 넣어줌
HashSet<Character> skipSet = new HashSet<>();
for(char c : skip.toCharArray()){
skipSet.add(c);
}
//문자열을 계속 추가해야하는 상황에서는 String 보다 StringBuilder를 사용하는데
// 메모리상 효율적!
StringBuilder answer = new StringBuilder();
//index의 크기만큼 s의 값들을 증가시킴
for(char c : s.toCharArray()){
char newChar = c;
int count = 0;
while(count < index){
newChar++;
if (newChar > 'z')
newChar= 'a';
//skipSet에 포함되어 있는 값을 만날시 count 값에 포함 X
if(!skipSet.contains(newChar))
count++;
}
answer.append(newChar);
}
return answer.toString();
}
}