[プログラマ]大数の作成



📩 -->問題の説明
ある数字からk個の数字を削除しようとしたときに得られる最大の数字を取得しようとします.
たとえば、2つの数字が1924から削除された場合、[19,12,14,14,92,94,24]を作成することができる.このうち最大の数字は94です.
解関数のパラメータとして文字列形式で与えられた数値と削除する数値kを用いる.
solution関数を完了し、numberからk個の数値を削除したときに作成できる最大数値を文字列で返します.
せいげんじょうけん
  • は、1桁より大きく、100000桁未満の数字です.
  • kは、1または複数のビット数未満の自然数である.
  • I/O例
    numberkreturn"1924"2"94""1231234"3"3234""4177252841"4"775841"
    💡 ソリューション(使用言語:python)
    def solution(number, k):
        answer=[]
        for i in number:
            while k>0 and len(answer)!=0 and answer[-1]<i:
                answer.pop()
                k-=1
            answer.append(i)
        answer=answer[:-k] if k >0 else answer
        return ''.join(answer)
    👉 説明:
  • 号の数字を一つ一つ積み上げます.
  • numberから1つずつ読み込まれた数字(i)がスタックの最後の数字より大きい場合、スタックにはi未満のすべての数字がポップアップされます.
  • が消去を必要とする回数(k)を満たさない場合、答えの最後のk数が消去される.

  • 🌈 に感銘を与える
    Greedyの問題ですが、何の関係もないような気がします.ははは
    ソース:プログラマ
    間違いがあればメッセージをお願いします🙂