Code KATA
Programmers 둘만의 암호 with Kotlin
어쩌다 개발자 주인장
2023. 12. 19. 10:06
https://school.programmers.co.kr/learn/courses/30/lessons/155652
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
class Solution {
fun solution(s: String, skip: String, index: Int): String {
var answer: String = ""
val alphabet = mutableListOf('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')
alphabet.removeAll { skip.contains(it) }
answer = s.map {
alphabet[(alphabet.indexOf(it) + index) % alphabet.size]
}.joinToString("")
return answer
}
}
나는 이런식으로 알파벳을 모두 리스트에 넣고 removeAll을 통해서 삭제시킨 다음 시작했다.
근데 더 깔끔한 방법이 있었다.
class Solution {
fun solution(s: String, skip: String, index: Int): String {
val alphabet = ('a'..'z').filter{ it !in skip }
return s.map { alphabet[(alphabet.indexOf(it) + index) % alphabet.size] }.joinToString("")
}
}
저런식으로도 되는구나...
맵 안에를 설명하자면 간단하다.
s 안을 순회하며 it이 알파벳의 몇번째 인덱스에 속하는지 값과 건너뛰어야 하는 index값을 더하고 알파벳 배열인덱스를 초과할 수 있기 때문에 배열 사이즈로 나머지 연산을 해준다. 이후 리턴 타입이 스트링이므로 joinToString()을 통해 타입을 맞춰준다.