요깨비's LAB

[프로그래머스, Kotlin] 문자열 압축 본문

알고리즘(Kotlin)/Brute-Force

[프로그래머스, Kotlin] 문자열 압축

요깨비 2021. 3. 25. 20:22

 

import java.util.*

class Solution {
    fun solution(s: String): Int {
        var answer = Int.MAX_VALUE

        var strLen = s.length
        var compactIndex = strLen / 2
        var compareStr = s.substring(compactIndex, strLen)

        for (i in 1..compactIndex) {
            var resultStr = ""
            var index = 0

            while (index <= strLen - (i * 2)) {
                var subStr = s.substring(index, index + i)
                index += i
                var count = 1

                var compareStr = s.substring(index, index + i)
                while (compareStr.contains(subStr) && index <= strLen - (i)) {
                    count += 1
                    index += i

                    if(index >= strLen || index + i > strLen)
                        break;
                    compareStr = s.substring(index, index + i)
                }

                if (count > 1) {
                    subStr = StringBuffer().append(count).append(subStr).toString()
                } else {
                    subStr = subStr
                }

                resultStr += subStr
//                resultStr = subStr + s.substring(index, s.length)
            }


            if(index != strLen) {
                resultStr += s.substring(index, strLen)
            }
//            println("$resultStr - $index")
            if (answer > resultStr.length)
                answer = resultStr.length
        }

        if(answer == Int.MAX_VALUE)
            answer = 1

        return answer
    }
}

 

전체 탐색으로 풀었습니다.
문자열을 1개 단위부터 압축가능한 범위인 (문자열길이/2)까지 (1..(strLen/2))
그안에서 문자열 전체에 대해 전체 연산을 진행하면서
(예를 들면, abcdeaaa일 경우 1개씩이면 [a],[b],[c],...[3a]
2개씩이면 ab-cd 불일치, bc-de 불일치, aa-a인덱스 초과이므로 중지,
3개씩이면 abc-dea 불일치,... dea-aa인덱스 초과이므로 중지,
4개씩이면 abcd-eaaa 불일치 bcde-인덱스 초과이므로 중지)
가장 짧은 문자열을 갱신하면서 마지막에 최종 연산 결과를 반환해주었습니다.

구현은 어찌어찌해서 맞추기는 했지만 실전에서 다시 풀었을때 제대로 풀 수 있을거란 확신이 서지 않기 때문에
해당 문제는 몇번 더 반복해서(다음번에는 자바 혹은 파이썬으로) 풀어보고 익숙하게 구현할 수 있도록 연습하려고 합니다.

Comments