https://programmers.co.kr/learn/courses/30/lessons/42883
어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.
예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.
문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.
lv.2 문제인데 푸는데 조금 어려웠다.
다른 사람의 풀이법을 보고 풀었다.
스택을 사용해서 풀었는데
number = 4177252841
stack = []
이면 하나씩 스택에 넣는다
[4] <- 177252841
[4,1] <- 77252841
이때 넣으려는 숫자가 스택의 마지막 수 보다 작으면 그냥 넣고,
크면 작은 수가 나오거나 stack이 비워질때까지 pop한다. (pop 하면서 k--)
(pop)
(pop)
[7] <- 7252841
[77] <- 252841
[772] <- 52841
(pop)
[775] <- 2841
[7752] <- 841
(pop)
k가 0이 되면 남은 숫자를 모두 스택에 집어넣고
[775841]
만약에 number를 다 넣었는데 k가 남아있다면
stack의 위에서 부터 pop 해준다
왜 이 생각을 못했을까..
다음번에 비슷한 문제가 나오면 꼭 스택을 잘 활용하자!!
def solution(number, k):
stack = []
for n in number:
while stack and n > stack[-1]:
if k > 0:
stack.pop()
k -= 1
else:
break
stack.append(n)
if k > 0:
for _ in range(k):
stack.pop()
return ''.join(stack)