핵심은 stack에 새로 들어운 수보다 작은 수들을 지워주는 것이다. 이걸 어떻게 추론하셨을까 .. 어렵다 .. 😅
12번 테이스트케이스는 ("77777",1), ("777711111",1) 와 같이 하나도 안지워지는 경우이다. 이 때는 가장 작은 수가 가장 뒤에 있기 때문에 뒤에서 부터 k번 지워주면 된다.
import Foundation
func solution(_ number:String, _ k:Int) -> String {
var arr = Array(number).map{
return Int(String($0))!
}
var stack: [Int] = []
var cnt = 0
for i in 0..<arr.count{
// 새로들어온 수보다 작은 수를 지워준다.
while stack.count > 0 && stack.last! < arr[i] && cnt < k{
stack.removeLast()
cnt += 1 // 지운 횟수 체크
if cnt == k{
break
}
}
stack.append(arr[i])
}
// 테스트 12번
if cnt == 0 {
for i in 1...k{
stack.removeLast()
}
}
return stack.reduce(""){ $0 + "\($1)"}
}