그리디
문제
def solution(number, k):
answer = ''
result_len = len(number)-k
pivot = 0
while(result_len>0): # 선택하기
until = len(number)-result_len+1 # k+1까지란 소리..
if len(number)-pivot == result_len : # 남은 배열의 수가 선택할 수 있는 수만큼 남았다면
answer+=number[pivot:]
break
current_max='0'
for n in range(pivot,until): # 시작부터 선택할 수 있는 수 내로
if current_max < number[n]: # 가장 큰 수 찾기
current_max=number[n]
pivot = n
if number[n]=='9': break
#current_max = max(number[pivot:until]) #max 직접 구현하기
answer+=current_max
pivot +=1 #number[pivot:until].find(current_max)+pivot+1 # 찾은 가장 큰 수 다음부터 다시 찾기
## 범위 내로 선택할 수 있는 가장 큰 수를 선택하는 것
result_len-=1
return answer
function solution(number, k) {
let list = number.split('').map(e=>parseInt(e))
stack=[]
list.forEach(element => {
while(stack && stack[stack.length-1] < element && k >0){
// 삭제 권한이 아직있고, 스택의 top이 지금 나온 수보다 작으면 pop 앞에는 이 수보다 크면 안됨! 뒤로갈수록 수가 작아지니깐
k-=1
stack.pop()
}
stack.push(element)
});
if( k!=0){
stack= stack.slice(0,stack.length-k)
}
return stack.join('')
}