[プログラマー-貪欲法(Greedy)]より大きな数を創造する


問題の説明


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

せいげんじょうけん

  • は、2桁より大きく、100000桁未満の数字です.
  • kは、1または複数のビット数未満の自然数である.
  • def solution(number, k):
        
        # (idea) number를 앞에서부터 순서대로 큰 수대로 k번 넣는다.
        
        a=[]
        
        for x in number:                  # number 수를 앞에서부터 차례대로 반복한다.
            while a and a[-1]<x and k>0:  # 앞에서부터 number의 숫자가 a의 마지막 숫자보다 크면 빼기를 k번 반복한다.
                k-=1         
                a.pop()                  
            a.append(x)                   # 숫자를 앞에서부터 넣는다.
    
        return "".join(a[:len(a)-k])      # a 리스트 원소를 join을 통해 문자열로 변환한다.
        # k는 while문에서 0이 되어 빠져나오겠지만, k가 0이 아닐 경우에는 맨 뒤 작은 숫자를 빼게 한다.

    スタック(Stack):最初のアウトバウンド(LIFO)。後入先出。


    後から入ってきた(=最近入ってきた)が一番先に出ます.パイソンはリストでスタックを真似することができます.