number | k | return |
---|---|---|
"1924" | 2 | "94" |
"1231234" | 3 | "3234" |
"4177252841" | 4 | "775841" |
: 앞 단계에서의 선택(앞 자리에 큰 수)이 이후 단계에서의 동작에 의한 해(solution)의 최적성에 영향을 주지 않음
def solution(number, k):
number_list = []
answer = ''
for num in number:
while len(number_list) != 0 and number_list[-1] < num and k > 0:
number_list.pop()
k -= 1
number_list.append(num)
for i in range(len(number_list) - k):
answer += str(number_list[i])
return answer
def solution(number, k):
collected = []
for i, num in enumerate(number):
while len(collected) > 0 and collected[-1] < num and k > 0:
collected.pop()
k -= 1
if k == 0:
collected += list(number[i:])
break
collected.append(num)
collected = collected[:-k] if k > 0 else collected
answer = ''.join(collected)
return answer
- 알고리즘 복잡도 : O(n)
-> 각 요소가 최대 한 번 들어갔다가 한 번 나오기 때문에