아스키 코드를 알아야 z 에서 a로 다시 돌아올 수 있을 것 같다.
아스키 코드는 요래 생겼다.
A - Z 는 65 부터 90 a -z 는 97 부터 122
class Solution {
fun solution(s: String, n: Int): String {
var answer = ""
//[a, B, z] , 4
s.map {
if(it == ' '){
answer += it
}
else if(it.isUpperCase()){
if((it + n).toInt() > 90){
answer += (it + n) - 26
}
else {
answer += it + n
}
}
else {
if((it + n).toInt() > 122){
answer += (it + n) - 26
}
else{
answer += it + n
}
}
}
return answer
}
}
.map 함수를 사용하여 문자열을 리스트에 담아 원소 하나하나를 다뤄준다. 활용도가 매우 좋은 듯^^
예시를 위해 "abcd" 문자열을 .map으로 ["a", "b", "c", "d"] 이런 형식으로 바꿔줄 수 있다.
공백은 그대로 문자열에 넣고 대문자와 소문자를 1차적으로 구별한다.
a 부터 z 가 순환해야 하기 때문에 아스키값 범위를 넘어가면 다시금 처음으로 돌아오도록 한다.
이해를 돕기 위해 예시를 들자면, 만약 X(아스키값->88) 를 4 만큼 밀었을때 아스키 값 90을 초과하므로 초과한 만큼의 값을 얻기위해 X + 4 에서 90을 빼준다. 예시에서는 88 + 4 - 90 이므로 2가 남게 된다. A에서 2만큼 더 밀어줘야하는데
A는 아스키값으로 65 이므로 2에 64를 더해주면 된다. 이 과정은 동일하게 순환하게 해주는 값 -90+64 이므로 위에서는 간단하게 -26으로 해주었다.
이보다 훨씬 간단한 코드가 있어 공유한다.
class Solution {
fun solution(s: String, n: Int): String =
s.map {
when {
it.isLowerCase() -> 'a' + (it + n - 'a') % 26
it.isUpperCase() -> 'A' + (it + n - 'A') % 26
else -> ' '
}
}.joinToString("")
}
내가 작성한 코드보다 확실히 간결하고 이쁘다,,
잘못된 내용 있으면 댓글 부탁드립니다.
'Code KATA' 카테고리의 다른 글
Programmers 푸드 파이트 대회 with Kotlin (0) | 2023.11.27 |
---|---|
Programmers 두 개 뽑아서 더하기 with Kotlin (0) | 2023.11.24 |
Programmers K번째 수 with Kotlin (0) | 2023.11.23 |
Programmers 문자열 내 마음대로 정렬하기 with Kotlin (0) | 2023.11.22 |
Programmers 숫자 문자열과 영단어 with Kotlin (2) | 2023.11.21 |