Simple&Natural

2020 카카오 공채 코딩테스트 - 문자열 압축 본문

코딩테스트 풀이/카카오

2020 카카오 공채 코딩테스트 - 문자열 압축

Essense 2020. 8. 26. 16:32
728x90

 

푼지 좀 지난 문제다보니 자세히 어떻게 풀었는지 가물가물한데

문자열을 1개, 2개, 3개 단위로 늘려가며 압축해본 후 가장 짧은 값을 리턴하면 된다.

참고로 소스는 절대 깔끔한 편이 아니다.

더 좋은 다른 코드가 많으니 참고 바람.

 

 

 

사용언어: Kotlin

 

소스코드:

fun solution(s: String): Int {
        var answer = 0
        var answerStr = ""
        var count = 0
        var tmpStr = ""
        var tmpCount = 0

        while(count <= s.length/2-1) {
            count++
            tmpCount = 1

            for (i in 1 until s.length/count) {

                if( s.substring(count*(i-1), count*(i)) == s.substring(count*(i), count*(i+1)) ) {
                    tmpStr = s.substring(count*i, count*(i+1))
                    tmpCount++

                    if(i == s.length/count-1) {
                        answerStr = answerStr.plus(tmpCount.toString() + tmpStr).plus(s.substring(count*(i+1), s.length))
                    }

                } else {
                    tmpStr = s.substring(count*(i-1), count*(i))

                    if(tmpCount > 1) {
                        answerStr = answerStr.plus(tmpCount.toString() + tmpStr)
                        if(i == s.length/count-1) {
                            answerStr = answerStr.plus(s.substring(count*(i), s.length))
                        }

                    } else {
                        if(i == s.length/count-1) {
                            tmpStr = tmpStr.plus(s.substring(count*(i), s.length))
                        }

                        answerStr = answerStr.plus(tmpStr)
                    }

                    tmpCount = 1

                }

            }

            if(count==1) {
                answer = answerStr.length
            } else {
                if(answerStr.length < answer) {
                    answer = answerStr.length
                }
            }

            answerStr = ""
        }

        if(s.length ==1)
            return 1

        return answer
    }
728x90