大数


作成日:2022年1月24日午後5:23

インプリメンテーションコード

# 가장 큰 수
import sys
sys.stdin = open("input2.txt" ,"rt")
n, m = map(int, input().split())

cnt = 0
res = []
n = list(str(n))
n = list(map(int, n))

while len(n) != 0:
    a = n.pop(0)
    if len(res) == 0:
        res.append(a)
    else:
        while len(res) != 0:
            if res[-1] < a and cnt < m:
                res.pop()
                cnt += 1
            else:
                break
        res.append(a)

if cnt < m:
    for _ in range(m-cnt):
        res.pop()

for x in res:
    print(x, end='')
  • アイデア
  • から与えられた数字のリストから、前から1つずつ取り出してresに入れ、resに入れる新しい数字が既存のresの最後の数字より大きい場合は、その数字(res[1])を削除してresに入れ続ける.
  • 模範解答

    import sys
    sys.stdin=open("input.txt", "rt")
    num, m=map(int, input().split())
    num=list(map(int, str(num)))
    stack=[]
    for x in num:
        while stack and m>0 and stack[-1]<x:
            stack.pop()
            m-=1
        stack.append(x)
    if m!=0:
        stack=stack[:-m]
    res=''.join(map(str, stack))
    print(res)
  • は、私が実装したコードと同じ動作原理ですが、簡略化されたコードです.