より大きなプログラマの作成


🙂 質問-大数の作成


url : https://programmers.co.kr/learn/courses/30/lessons/42883

勘定科目の問題の内容


ある数字からk個の数字を削除しようとしたときに得られる最大の数字を取得しようとします.
たとえば、2つの数字が1924から削除された場合、[19,12,14,14,92,94,24]を作成することができる.このうち最大の数字は94です.
解関数のパラメータとして文字列形式で与えられた数値と削除する数値kを用いる.solution関数を完了し、numberからk個の数値を削除したときに作成できる最大数値を文字列で返します.

制限

  • は、1桁より大きく、100000桁未満の数字です.
  • kは、1または複数のビット数未満の自然数である.
  • 🖐解答方法

  • プログラマーでLEVEL 2を構成します.
  • 制限事項のnumber=<1000000であり,完全探索はできない.(タイムアウト)
  • は最初はtwo pointerを使用しようとしましたが、スタックの性質を利用すれば、私の前の位置が私より小さい場合は、ストレージの数を削除することで解放できると思います.
  • 位第2条件では、以下の条件に注意する.
  • kがゼロになる前に、私の前の数字が小さいかどうかを見る必要があります.
  • はキャビネットを隠す、後ろのn個の数字はすべて同じで、kが減らない場合はex(211111、k=2)
  • を単独で処理した.

    📃 CODE

       def solution(number, k):
       answer = ''
       stack = []
       remain = []
       for s in number:
           
           if k ==0:
               remain.append(s)
               continue
               
           while(1):
               if k == 0:
                   stack.append(s)
                   break
               
               if len(stack) == 0:
                   stack.append(s)
                   break
               
               elif int(stack[-1]) < int(s):
                   del stack[-1]
                   k-=1
               elif int(stack[-1])>= int(s):
                   stack.append(s)
                   break
               
    
       for s in stack:
           answer+=s
       for s in remain:
           answer+=s
           
       if k > 0:
           answer = answer[:len(answer)-k]
       return answer