둘만의 암호
주어진 문자열 s의 각 문자마다 주어진 index만큼 뒤로 넘기고 skip안에 있는 문자는 뛰어넘어 나온 문자를 반환한다.
처음에는 문자열 s의 index만큼 넘어간 각 문자를 skip과 비교해 같은 문자의 개수를 세어 해당 개수만큼 뒤로 더 밀어주는 식으로 해결했는데 예제에서는 정답인데 제출 후 채점을 하니 틀리게 나왔다.
이유는 반례 "z","abcdefghij", 20 = "n"를 해결하지 못한다.
다른사람 코드를 참고해 z를 넘어가면 a로 바꿔주고 다음 문자로 넘겨 skip에 포함된 문자이면 포함하지 않을때까지 반복해 나온 문자를 반환해주도록 풀었다.
나의풀이
class Solution {
fun solution(s: String, skip: String, index: Int): String {
var answer: String = ""
var result = 0
for(i in s ){
var check = i
for(j in 1..index){
if(check + 1 > 'z'){
check = 'a'
}else{
check += 1
}
while(skip.contains(check)){
check += 1
if(check > 'z'){
check = 'a'
}
}
}
answer += check
}
return answer
}
}
다른사람의 풀이
class Solution {
fun solution(s: String, skip: String, index: Int): String {
var answer: String = ""
val skipped = skip.map { it.toChar() }
val alphabet = ('a'..'z').filter { it !in skipped }
s.forEach {
val i = (alphabet.indexOf(it) + index) % alphabet.size
answer += alphabet[i]
}
return answer
}
}
모든 문자의 배열을 만들어 skip의 문자를 빼준후 index만큼 넘겨주는 방법