큰 수 만들기(python)

이민호·2021년 4월 1일
0

나의 풀이

def solution(number, k):
  x = 0
  remain = len(number) - k
  answer = []
  while remain > 0:
      #1	
      x = len(number) - (remain -1)
      possible = number[:x]
      #2
      max_num = max(possible)
      answer.append(max_num)
      #3
      max_idx = number.index(max_num)
      number = number[(max_idx+1) : ]
      remain -= 1
      return "".join(answer)

#1. remain(만들 숫자의 길이)만큼 가능한 숫자들을 possible에 넣어준다.

#2. possible에서 max_num(제일 큰 수)를 answer에 넣어준다.

#3. number에서 max_num의 index를 구한다음 max_num이후 숫자부터 슬라이싱 해준다.

문제점:
9999999...999999같은 케이스에 시간초과가 난다.

다른사람의 풀이

def solution(number, k):
  stack = []
  for i in number:
      while stack and i > stack[-1]:
          if k > 0:
              stack.pop()
              k -= 1
          else:
              break
      stack.append(i)
                              .    
  if k > 0:
      for i in range(k):
          stack.pop()
       								 .		  
  return "".join(stack)

이 방법을 이용하면 시간초과가 난 9999999...9999같은 케이스는 stack에 들어갔다가 k만큼만 다시 나오기 때문에 시간초과가 나지 않는다.

profile
life is fun

0개의 댓글