[프로그래머스] 가운데 글자 가져오기

neoneoneo·2024년 2월 27일
0

kotlin

목록 보기
11/49
post-custom-banner

문제

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

나의 풀이

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

고수의 풀이

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

배운점

  • with()의 활용
    • with은 특정 객체를 활용하여 수행할 작업들을 그 객체 범위 내에서 실행할 수 있도록 하는 함수이다.
    • 고수의 풀이에서는 s에 대한 확장 함수를 호출하는데, s에 대한 작업을 할 때 매번 s.로 시작하는 것을 피하기 위함이다. with 블록 안에서는 s가 없어도 해당 문자열에 접근할 수 있다.
  • substring의 활용
    • 긁어올 문자의 범위를 지정하게끔 한다.
      • 'length / 2 - 1' : 문자열의 중간 인덱스로 이동
      • '+ (length % 2)' : 문자열의 길이가 !홀수!일 경우 추가적으로 한 글자 더 이동
      • '..length / 2' : 중간 인덱스부터 문자열 끝까지의 범위를 지정 (..은 범위 연산자)
  • 고수는 substring 함수의 매개변수로 전달되는 인덱스를 계산하는 부분에서 조건문 없는 조건(?)식 사용했다.
    • substring안에는 시작과 끝 인덱스의 값을 직접 지정하거나 ..을 이용하여 범위로 표현을 할 수 있다.
    • 여기서 s의 길이가 홀수라면 그 범위가 x~x 이지만, 짝수라면 x-1~x가 나올 수 있는 계산식이다. 어떻게 이런 생각을.. 정말 대단한 것 같다..

[TIL-240227]

post-custom-banner

0개의 댓글