프로그래머스 - 큰 수 만들기(kotlin)

silver·2021년 8월 12일
0

[문제 내용]
어떤 숫자에서 k개의 수를 제거해 얻을 수 있는 가장 큰 숫자를 구하라.

[example 1]

numberkreturn
"1924"2"94"

[example 2]

numberkreturn
"1231234"3"3234"

[example 3]

numberkreturn
"4177252841"4"775841"

[해결 방법]
먼저 가진 숫자에서 가장 큰 수를 찾는다.
가장 큰수가 가장 앞에 오는게 가장 큰 수가 될 것이기 때문이다.
가장 큰 수를 찾았으면,
그 앞에 있는 수의 갯수가 제거할 수인 k개보다 작거나 같다면
그 앞에 수를 제거한다.

위 방법을 반복하면된다.
다시 남은 수에서 가장 큰 수를 찾고,
그 큰 수보다 앞에 있는 수가 작은 수의 갯수가
(k-아까 제거한 수)개보다 작거나 같다면 제거.

그렇게 제거할 수 있는 수가 0이 된다면 빠져나오면 된다.
여기서 주의할 점은
"987654321" 과 같이 큰 숫자가 앞에서부터 차례대로 채워져있다면,
가장 큰 수보다 앞에 있는 수가 없게 된다.
그럴경우엔 그냥 뒤에를 k만큼 잘라버리면 된다.

class Solution {
    fun solution(number: String, k: Int): String {
        var index = number.length
        var last = k
        val num = StringBuilder()
        var _number = number
        while(last != 0 && index != 0) {
            do {
                val findBigStr = _number.substring(0, index)
                val big = findBigStr.max()!!
                index = _number.indexOf(big)
            } while (last < index)

            num.append(_number[index])
            _number = _number.substring(index+1)
            last -= index
            index = _number.length
        }

        if(index == 0) {
            return num.substring(0, num.length-last)
        } else {
            num.append(_number)
        }

        return num.toString()
    }
}

0개의 댓글