본문 바로가기
스터디(programmers)

Kotlin] 프로그래머스 lv.1, 가장 가까운 같은 글자

by 김마리님 2023. 2. 22.

https://school.programmers.co.kr/learn/courses/30/lessons/142086

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

더보기

생각하면 간단하다. 굳이 for문 이중으로 돌릴 필요 없이, 조건에서

'내 앞' 에 있던 값 중 가장 가까운 값을 찾아달라고 얘기 한다. 그래서 뒷 값 다 필요 없이 substring으로 현재 문자의 순서만큼 잘라버리고, 거기서 lastIndex로 가장 뒤쪽의 값의 인덱스를 찾는다.

 

만약 인덱스가 없다면 -1을 반환하고, 인덱스가 있다면 현재 위치와 비교해서 그 차이만큼 값을 넣으면 된다.

 

class Solution {
    fun solution(s: String) : IntArray {
        var answerList = mutableListOf<Int>()

        for(i in s.indices) {
            var stringS = s.substring(0, i)
            var lastIndex = stringS.lastIndexOf(s[i])
            answerList.add(if(lastIndex == -1){
                -1
            } else {
                i - lastIndex
            })
        }

        return answerList.toIntArray()
    }
}

 

 

+) 이 부분 같은 경우는 인덱스가 확실히 정해져있는 문제이다. 따라서 배열을 써서 읽는 속도를 빠르게 하면 어떨까 생각.. 

class Solution {
    fun solution(s: String) : IntArray {
        var answerArray = IntArray(s.length)

        for(i in s.indices) {
            var stringS = s.substring(0, i)
            var lastIndex = stringS.lastIndexOf(s[i])
            answerArray[i] = if(lastIndex == -1){
                -1
            } else {
                i - lastIndex
            }
        }

        return answerArray
    }
}

 

오, 확실히 개선된 속도가 보인다. 변환과정이 없어서 그런가 히트레이트가 높아서 그런가.

반응형