https://school.programmers.co.kr/learn/courses/30/lessons/42883
import itertools
def solution(number, k):
answer = ''
my_list = [i for i in number]
new_num= sorted(list(itertools.combinations(my_list,len(number)-k)))[-1]
return "".join(new_num)
itertools.combinations를 사용하여 모든 조합을 생성하고 정렬한다. 이러한 방식은 입력값이 큰 경우에는 매우 비효율적이기 때문에 시간 복잡도가 크게 증가하여 시간 초과가 발생할 수 있다.
예를 들어, 숫자 문자열의 길이가 10이고 k가 5라면, combinations를 사용하여 길이가 5인 모든 조합을 생성하는 과정에서 10개의 숫자 중 5개를 선택하는 조합의 수는 매우 크며, 이 모든 조합을 생성하고 정렬하는 데에 상당한 시간이 소요될 수 있다.
(Tip!)
파이썬의 index() 함수는 리스트나 문자열과 같은 시퀀스 타입에서 특정 값의 인덱스를 찾는 데 사용됩니다. 이 함수는 기본적으로 하나의 인자만 받아서 그 값의 첫 번째 등장하는 인덱스를 반환합니다.
하지만 두 개의 인자가 들어가면, 첫 번째 인자는 찾으려는 값이고, 두 번째 인자는 검색을 시작할 위치입니다. 즉, index(value, start) 형태로 사용됩니다. 이 경우에는 value 값이 start 인덱스부터 시작해서 처음으로 나타나는 위치의 인덱스를 반환합니다.
def solution(number, k):
goal = len(number) - k
result = ''
start = 0
while len(result) < goal:
max_num = max(number[start:len(number) - goal + len(result) + 1])
max_idx = number.index(max_num, start)
result += max_num
start = max_idx + 1
return result
주어진 문제는 크게 두 부분으로 나뉘어진다:
여기서 9가 가장 큰 숫자이므로, 만약 선택할 숫자가 아직 남아 있다면 항상 9를 선택하면 된다. 즉, 선택할 수 있는 숫자의 개수가 남아 있을 때는 9를 선택하고, 그렇지 않은 경우에는 현재 남아 있는 숫자 중 가장 큰 숫자를 선택하면 된다.
def solution(number, k):
stack = []
for num in number:
while stack and k > 0 and stack[-1] < num:
stack.pop()
k -= 1
stack.append(num)
while k > 0:
stack.pop()
k -= 1
answer = ''.join(stack)
return answer