s
index만큼 증가시킬 문자열 | "aukks"
skip
증가시킬 때 포함하지 않을 문자들 | "wbqd"
index
증가할 수치 | 5
=> s의 각 문자를 index만큼 증가시키되 skip에 속한 문자는 증가 대상에 포함하지 않을 때 만들어지는 문자열을 return
각 문자를 증가시키면서 skip에 속한 문자가 존재하면 +1을 한번더 진행
import java.util.*;
class Solution {
public String solution(String inp_s, String inp_skip, int inp_index) {
String answer = "";
for(char s : inp_s.toCharArray()){
for (int index = 0; index < inp_index; index++) {
s += 1;
if (s > 'z') {
s -= 26;
}
if (inp_skip.contains(String.valueOf(s))) {
index--;
}
}
answer += s;
}
return answer;
}
}
import java.util.*;
class Solution {
public String solution(String inp_s, String inp_skip, int inp_index) {
Set<Character> skip_set = new HashSet<>();
for(char skip : inp_skip.toCharArray()){
skip_set.add(skip);
}
String answer = "";
for(char s : inp_s.toCharArray()){
for (int index = 0; index < inp_index; index++) {
s += 1;
if (s > 'z') {
s -= 26;
}
if (skip_set.contains(s)) {
index--;
}
}
answer += s;
}
return answer;
}
}
=> 더 느린 결과가 나왔음
import java.util.*;
class Solution {
public String solution(String inp_s, String inp_skip, int inp_index) {
Set<Character> skip_set = new HashSet<>();
for(char skip : inp_skip.toCharArray()){
skip_set.add(skip);
}
StringBuilder answer = new StringBuilder();
for(char s : inp_s.toCharArray()){
for (int i = 0; i < inp_index; i++) {
s += 1;
if (s > 'z') {
s -= 26;
}
if (skip_set.contains(s)) {
i--;
}
}
answer.append(s);
}
return answer.toString();
}
}
=> 빠르게 연산이 가능했음
import java.util.*;
class Solution {
public String solution(String inp_s, String inp_skip, int inp_index) {
String alpha = "abcdefghijklmnopqrstuvwxyz";
for(String skip : inp_skip.split("")){
alpha = alpha.replace(skip, "");
}
int len = alpha.length();
StringBuilder ans = new StringBuilder();
for(String s : inp_s.split("")){
ans.append(alpha.charAt((alpha.indexOf(s) + inp_index)%len));
}
return ans.toString();
}
}
=> 비슷했지만 좀더 많은 테케에서 빠른 속도로 실행이 가능했음
TIP : 문자열 합치기 연산을 해야할 경우 StringBuilder를 쓰는 것이 효율적이다.