ㅋㅋㅋ이거 이번에 mysql다루면서 봤던 짤이라 첨부함
from itertools import combinations
def solution(number, k):
l = len(number)
num_combinations = list(combinations(number, l - k))
num_list = []
for num in num_combinations:
num_list.append(''.join(num))
for num in num_list:
num = int(num)
answer = str(max(num_list))
return answer
문제를 처음 보고 l-k
개 만큼 조합을 구해주고 거기서 max
찍으면 되겠다! 라고 생각 했는데 테케 1, 2를 제외하고 어림도 없이 시간초과가 났다. 조합의 경우 시간복잡도가 O(2^N)
이라는 사실.. 상당하기 때문에 조합을 구해야하는 수가 많으면 알고리즘테스트에선 써먹기가 어려운 부분이기도하다😂
해당 문제의 제한 조건은 number는 2자리 이상, 1,000,000자리 이하인 숫자입니다.
이기 때문에 단순히 combinations
를 이용하면 시간초과가 나는 것이 당연했던 것..! 이를 고려해서 생각해 본 알고리즘은 아래에 쓰도록 하겠다.
def solution(number, k):
answer = ''
stack = []
for num in number:
while stack and stack[-1] < num and k > 0:
k -= 1 # 1
stack.pop()
stack.append(num) # 7, 7, 5, 8, 4, 1
if k != 0:
stack = stack[:-k]
answer = ''.join(stack)
return answer
pop
해주고, 더 큰 숫자를 stack
에 append
해준다. k
개를 제외한 숫자만 필요하니까 while
반복문을 돌 때 k
가 1씩 줄어들도록 한다.if
문은 k
가 0이 아닐 때, 나머지 while
문 조건을 만족시키지 못하면 뒤에 따라오는 숫자가 stack
에 모두 담겨서 자릿수에 맞지 않는 숫자가 출력될 때 이를 슬라이싱해주는 부분이다.