BOJ 2812 크게만들기와 동일한 문제다
k: 남은 제외할 숫자의 횟수
스택에 숫자를 집어넣으면서 top보다 현재 숫자가 크면 top 이하의 수나 될때까지 pop을 한 후에 현재 숫자를 push한다. pop의 횟수는 숫자를 제외하는 횟수이므로 k를 줄여준다
이 문제에 함정이 있는데, 스택을 다 채우더라도 k가 아직 0이 아닐 수 있다.(제외할 횟수를 반드시 k번 사용해야 한다). 따라서 스택의 앞에서부터 (원래 문자열의 길이) - k만큼 이 정답이다.
def solution(number, k):
answer = ''
stack = []
L = len(number) - k
for n in number:
while stack and stack[-1] < n and k > 0:
_ = stack.pop()
k -= 1
stack.append(n)
answer = ''.join(stack[:L])
return answer
백준 BOJ 2812
N, K = map(int, input().split())
number = input()
answer = ''
stack = []
k = K
for n in number:
while stack and stack[-1] < n and k > 0:
_ = stack.pop()
k -= 1
stack.append(n)
answer = ''.join(stack[:N - K])
print(answer)