https://school.programmers.co.kr/learn/courses/30/lessons/155652
문제
두 문자열 s와 skip, 그리고 자연수 index가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다.
문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다.
index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다.
skip에 있는 알파벳은 제외하고 건너뜁니다.
예를 들어 s = "aukks", skip = "wbqd", index = 5일 때, a에서 5만큼 뒤에 있는 알파벳은 f지만 [b, c, d, e, f]에서 'b'와 'd'는 skip에 포함되므로 세지 않습니다. 따라서 'b', 'd'를 제외하고 'a'에서 5만큼 뒤에 있는 알파벳은 [c, e, f, g, h] 순서에 의해 'h'가 됩니다. 나머지 "ukks" 또한 위 규칙대로 바꾸면 "appy"가 되며 결과는 "happy"가 됩니다.
두 문자열 s와 skip, 그리고 자연수 index가 매개변수로 주어질 때 위 규칙대로 s를 변환한 결과를 return하도록 solution 함수를 완성해주세요.
제한사항
5 ≤ s의 길이 ≤ 50
1 ≤ skip의 길이 ≤ 10
s와 skip은 알파벳 소문자로만 이루어져 있습니다.
skip에 포함되는 알파벳은 s에 포함되지 않습니다.
1 ≤ index ≤ 20
풀이
class Solution {
fun solution(s: String, skip: String, index: Int): String {
val sb = StringBuilder()
val skip_arr = BooleanArray(26)
skip.forEach { skip_arr[it.getIndex()] = true }
s.forEach {
var idx = it.getIndex()
repeat(index){
idx++
if (idx > 25) idx = 0
while (skip_arr[idx]){
idx++
if (idx > 25) idx = 0
}
}
sb.append(idx.getAlphabet())
}
return sb.toString()
}
fun Char.getIndex() :Int = this - 'a'
fun Int.getAlphabet() : Char = 'a' + this
}
- 해당문제같은 경우도 구현문제입니다. 말 그대로 문제가 설명한 데로 값들을 바꿔주면 됩니다.
- 문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다. -> 이조건은 문자의 Char값들이 아스키 값으로 되어있기 때문에 정수를 더해주면 해당위치의 아스키값이 됩니다.
- index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다. -> 조건문은 이용해서 z를 넘을경우 a로 바꿔주면 됩니다.
- skip에 있는 알파벳은 제외하고 건너뜁니다. -> 알파벳 사이즈만큼의 배열을 많들어 해당위치만 true를 집어넣어 알파벳을 1씩 더하는 연산을 하는 경우 해당 경우를 넘기면 됩니다.
- 이렇게 하나씩 조건들을 생각하여 이내용을 잘 조합해주면 됩니다.
결과
'코틀린 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 개인정보 수집 유효기간(Kotlin) (0) | 2023.08.10 |
---|---|
[프로그래머스] - 피보나치 수(Kotlin) (0) | 2023.08.10 |
[프로그래머스] - 신규 아이디 추천(Kotlin) (0) | 2023.08.09 |
[프로그래머스] - 행렬의 곱셈(Kotlin) (0) | 2023.08.09 |
[프로그래머스] - 완주하지 못한 선수(Kotlin && Java) (0) | 2023.08.09 |