본문 바로가기

알고리즘

카카오 블라인드 2020 문자열 압축 코틀린

반응형
fun solution(s: String): Int {
        val length = s.length
        var min = length
        val mid = length/2+1
        for (cnt in 1 until mid+1) { //압추크기가 반을 넘을 수 없어서
            var len = length
            var i =cnt
            var num = 1

            while (i<length-cnt+1) {
                val word =s.substring(i, i+cnt)
                val word2 =s.substring(i-cnt,i)
                if(word==word2) {  //중복되는지
                    num++  //중복되면 중복 카운트 증가
                    len-=cnt  //중복된 문자열의 길이를 빼줌
                } else {
                    if (num!=1) {
                        len+= num.toString().length //중복 숫자를 더해줌 여기서 실수를 했었는데 num의 자리수를 고려해야 한다.(ex 10, 100..)
                        num=1
                    }
                }
                i+=cnt

                if (i>=length-cnt+1 &&num!=1) {
                    len+= num.toString().length  //마지막에 중복 숫자를 더해줌
                }
            }
            if (min>len) {
                min =len
            }
        }
        return min
    }

 

 

반응형