[문제 내용]
어떤 숫자에서 k개의 수를 제거해 얻을 수 있는 가장 큰 숫자를 구하라.
[example 1]
number | k | return |
---|---|---|
"1924" | 2 | "94" |
[example 2]
number | k | return |
---|---|---|
"1231234" | 3 | "3234" |
[example 3]
number | k | return |
---|---|---|
"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()
}
}