코딩테스트

프로그래머스 | 가운데 글자 가져오기 | Kotlin

다시은 2024. 1. 2. 09:52

 

 

문자열 s의 길이가 짝수인지 홀수인지 구분해서 짝수면 길이를 2로 나눈 몫에 해당하는 인덱스로, 홀수면 길이를 2로 나눈 몫에서 1을 뺀 인덱스와 몫에 해당하는 인덱스를 반환하게 했다.

그런데 문자열에서 인덱스로 요소를 가져오니까 타입이 Char으로 추론이 되어서 강제로 String으로 변환시켜주어야 했다.

class Solution {
    fun solution(s: String): String {
        var answer: String = ""
        var a = s.length
        if(a %2 ==0){
            answer = s[a/2-1].toString() + s[a/2].toString()
        } else {
            answer = s[a/2].toString()
        }
        return answer
    }
}

 

 

 

다른 사람 풀이

class Solution {
  fun solution(s: String) =
    with(s) { substring(length / 2 - 1 + (length % 2) .. length / 2) }
}

전혀 모르겠다. with 은 어떻게 쓰는거고 substring은 무슨 역할인지

 

.substring( a .. b)

문자열의 a번째부터 b번째 전까지 자르기 (until -1 사용이랑 똑같다)

1 . qwer
answer = "qwer".substring(4/2 - 1 + (4%2) .. 4/2)
answer = "qwer".substring( 1 .. 2 )
answer = "we"


2. abcde
answer = "abcde".substring(5/2 -1 + (5%2) .. 5/2)
answer = "abcde".substring(1.5 .. 2)
answer = "c"

 

 

with(receiver) {}

receiver 로 객체를 입력받으면 it 이나 this 등의 키워드 없이도 객체의 속성을 참조하거나 변경할 수 있다.

여러 번 호출할 필요가 있을 때 그룹핑하는 용도!

with 을 사용하지 않는다면 아래와 같다.

class Solution {
  fun solution(s: String) =
    s.substring((s.length / 2 - 1) + (s.length % 2) .. (s.length / 2))
}

 

 

 

다른 사람 풀이 2

class Solution {
    fun solution(s: String) = s.slice(((s.length - 1) / 2)..(s.length / 2))
}

.slice(a ..b)

원하는 구간만 잘라서 새롭게 반환하고 싶을 때 사용! 원본 변경  X