TIL #30

loci·2024년 5월 30일
0

TIL

목록 보기
28/103

둘만의 암호

주어진 문자열 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만큼 넘겨주는 방법

profile
편리한 개발자

0개의 댓글